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 GoodwinVP of Software DevelopmentAsked:
Who is Participating?
BradB3030Connect With a Mentor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.