How to Loop Through Each and Every Row, Put Value in Gridview Column Cells

How to loop through each and every row, column and cells in a GridView and set its value ASP.NET

I found a solution however it doesn't work on next page.

    protected void BindGridList()
{
for (int i = 0; i < GridView1.Columns.Count - 1; i++)
{
foreach (GridViewRow row in GridView1.Rows)
{
if (i == 0)
{
row.Cells[i].Text = GetEmpList()[row.RowIndex].ID.ToString();
}
else if (i == 1)
{
row.Cells[i].Text = GetEmpList()[row.RowIndex].Name.ToString();
}
//....
}
}
}

How to loop through each and every row, column and cells in a GridView and get its value

The easiest would be using a foreach:

foreach(GridViewRow row in GridView2.Rows)
{
// here you'll get all rows with RowType=DataRow
// others like Header are omitted in a foreach
}

Edit: According to your edits, you are accessing the column incorrectly, you should start with 0:

foreach(GridViewRow row in GridView2.Rows)
{
for(int i = 0; i < GridView2.Columns.Count; i++)
{
String header = GridView2.Columns[i].HeaderText;
String cellText = row.Cells[i].Text;
}
}

Asp.Net GridView Retrieving cell values of each row through for loop and hiding empty columns

Ok Guys I finally found the correct way to do this, at least a way that works for me. So you have to use the row.cells.count -1 to actually get the count of your columns when you have autogeneratecolumns set to true and in order to iterate through your columns to set them to visible = false, you must use

GridView1.HeaderRow.Cells(i).visible = False

Here is my Final code and hopefully this will help a lot of people out that have the same problem, Thank you all for your help and answers

 Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
Dim GridView1 As GridView = FormView1.FindControl("GridView1")
For Each row As GridViewRow In GridView1.Rows
For i As Integer = 0 To row.Cells.Count - 1
Dim strtest As String = row.Cells(i).Text.ToString
If strtest = " " Then
GridView1.HeaderRow.Cells(i).Visible = False
row.Cells(i).Visible = False

End If

Next
Next
End Sub

Looping through gridview and change certain column font colour

Right-click on your GridView then go to the properties tab and select events.In there you will find the event called RowDataBound.

In that event write your code to change the forecolor like:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//here the Cells is an array where you can pass the index value of the cell where you want to check and if you don't know where the value is then you can do a for loop and then check the value
if (e.Row.Cells[0].Text == "someValue")
{
e.Row.Cells[0].ForeColor = System.Drawing.Color.Red;
}
}
}

Update 1 for comparing the value using the IndexOf()

As for the data what you have given, you have to change the compare function from == to IndexOf("SomeValue").For that, you can try the IndexOf("actual"). If it gives value > -1 then change the color.
or you can try the below code where I am looping through all the columns in the row(you can try to avoid the looping if you have knowledge on which column the value will occur):

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
if (e.Row.Cells[i].Text.ToLower().IndexOf("actual") > -1)
{
e.Row.Cells[i].ForeColor = System.Drawing.Color.Red;
}
}

}
}

Update 2 Adding the snapshots of sample data and it's output.

Here is the sample data with which I am working:
enter image description here

And here is the processed output using the IndexOf() loop over the in RowDataBound event.
enter image description here

Hope this helps.

Looping through each row in a datagridview

You could loop through DataGridView using Rows property, like:

foreach (DataGridViewRow row in datagridviews.Rows)
{
currQty += row.Cells["qty"].Value;
//More code here
}


Related Topics



Leave a reply



Submit