C# 如何遍历 GridView 中的每一行、每一列和单元格并获取其值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12227742/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to loop through each and every row, column and cells in a GridView and get its value
提问by Archana B.R
I have a GridViewwhich is databound, on button_click I want to read the GridViewrow by row each column and read the value of each cell in a row and update a table in database? I also know how to check if that cell contains null.
我有一个GridView数据绑定,在 button_click 我想GridView逐行读取每列并读取一行中每个单元格的值并更新数据库中的表?我也知道如何检查该单元格是否包含空值。
I am trying something like this and got stuck:
我正在尝试这样的事情并被卡住了:
protected void SAVE_GRID_Click(object sender, EventArgs e)
{
int rowscount = GridView2.Rows.Count;
int columnscount = GridView2.Columns.Count;
for (int i = 0; i < rowscount; i++)
{
for (int j = 1; j < columnscount; j++)
{
// I want to get data of each cell in a row
// I want to read the corresponding header and store
}
}
}
采纳答案by Tim Schmelter
The easiest would be using a foreach:
最简单的方法是使用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:
编辑:根据您的编辑,您访问的列不正确,您应该从 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;
}
}
回答by mkebri
As it's said by "Tim Schmelter" this is the best way : just change in it's code the seconde loop ( GridView2.Columns[i].Count by row.Cells.Count ) so it looks seem's that:
正如“Tim Schmelter”所说,这是最好的方法:只需更改其代码中的第二个循环(GridView2.Columns[i].Count by row.Cells.Count),因此看起来似乎是:
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;
}
}
thank you.
谢谢你。
回答by Satyavan Choure
foreach (DataGridViewRow row in GridView2.Rows)
{
if ( ! row.IsNewRow)
{
for (int i = 0; i < GridView2.Columns.Count; i++)
{
String header = GridView2.Columns[i].HeaderText;
String cellText = Convert.ToString(row.Cells[i].Value);
}
}
}
Here Before Iterating for cell Values need to check for NewRow.
这里在迭代单元格值之前需要检查 NewRow。
回答by Irfan Noor
foreach (DataGridViewRow row in dataGridView1.Rows)
{
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
String header = dataGridView1.Columns[i].HeaderText;
//String cellText = row.Cells[i].Text;
DataGridViewColumn column = dataGridView1.Columns[i]; // column[1] selects the required column
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; // sets the AutoSizeMode of column defined in previous line
int colWidth = column.Width; // store columns width after auto resize
colWidth += 50; // add 30 pixels to what 'colWidth' already is
this.dataGridView1.Columns[i].Width = colWidth; // set the columns width to the value stored in 'colWidth'
}
}

