• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 482
  • Last Modified:

Loop through a datagrid and replace values

I have a datagrid.  It is being bound with a column that is either a 1 or a 0.  I need to replace the 1 with "X" and the 0 with "" in every field in a column.  Can someone help me out.  This cant be nearly as hard as Im making it.
Thanks for the help
Fred Goodwin
Fred Goodwin
1 Solution
dim i as integer
for i = 0 to datagrid1.items.count - 1
  'I'll assume the 1 or 0 is located in Column # 22, you'll have to change that accordingly
  if datagrid1.items(i).Cells(22) = "1" then
    datagrid1.items(i).Cells(22) = "X"
    datagrid1.items(i).Cells(22) = ""
  end if
next i

You can also do something similar in an ItemDataBound handler subroutine

using e.item instead of datagrid1.items(i) and no for loop.
Look at the ItemDataBound event.

This example uses assumes you're using ItemTemplates in your grid, but you could do it with bound columns as well:

Private Sub dg1_ItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dg1.ItemDataBound

       If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
            Dim lbl As Label
            Dim myValue As Integer = CType(DataBinder.Eval(e.Item.DataItem, "dataBaseField"), Integer)
            lbl = CType(e.Item.FindControl("lblInItemTemplateToChange"), Label)
            If myValue = 1 Then
               lbl.Text = "X"
               lbl.Text = ""
            End If
        End If

    End Sub 'dgSurveyItems_ItemDataBound

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
   if( e.Item.ItemType == ListItemType.Item ||
      e.Item.ItemType == ListItemType.AlternatingItem )
        DataRowView drvCurrent = (DataRowView)e.Item.DataItem;

        //I'm assuming the data type is a bit
        bool oneOrZero;
        oneOrZero = (bool)drvCurrent["HasResponded"];
        //use casting to get a reference to whatever control you want to manipulate (label or whatever you use)
        //note: you will probably want to change the cells and/or controls index    
        //Label lbl = ((Label)e.Item.Cells[0].Controls[0]);

        //manipulate your control
        if( oneOrZero )
             //lbl.Text = "X";
             //lbl.Text = "O";
Fred GoodwinVP of Software DevelopmentAuthor Commented:
BradB -  I like the loop option.  however when I run it I get the error of :

Property 'Item' is 'ReadOnly'

Fred GoodwinVP of Software DevelopmentAuthor Commented:
Ahh you were very close. Thanks for the help.  You just left out .text.  here is the loop I ended up using.

        Dim i As Integer
        For i = 0 To DG.Items.Count - 1
            If DG.Items(i).Cells(9).Text = 1 Then
                DG.Items(i).Cells(9).Text = "X"
                DG.Items(i).Cells(9).Text = ""
            End If
        Next i

Thanks again

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now