我有一个关于用户控件的数据网格,“修饰符”是公开的。我有以下代码:
for (int f = 0; f < gridOperations.Rows.Count; f++)
{
for (int z = 0; f < gridOperations.Rows[f].Cells.Count; z++)
{
MessageBox.Show(gridOperations.Rows[f].Cells[z].Value.ToString());
}
}
问题是,如果Z高于0,它就会给我
“对象引用未设置为对象的实例。”。
我不明白为什么会这样,如果我这样做:
MessageBox.Show(gridOperations.Rows[0].Cells.Count.ToString());
它显示了9个项目,所以有单元格,我只是不明白它为什么不让我访问它们。谢谢!
答案 0 :(得分:0)
尝试以下
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
if (cell.Value !=null)
{
MessageBox.Show(cell.Value.ToString());
}
}
}
答案 1 :(得分:0)
尝试改变这样..
for (int f = 0; f < gridOperations.Rows.Count-1; f++)
{
for (int z = 0; f < gridOperations.ColumnCount -1; z++)
{
MessageBox.Show(gridOperations.Rows(f).Cells(z).Value.ToString());
}
}
答案 2 :(得分:0)
试试这个;
for (int f = 0; f < gridOperations.Rows.Count; f++)
{
for (int z = 0; z < gridOperations.Rows[f].Cells.Count; z++)
{
MessageBox.Show(gridOperations.Rows[f].Cells[z].Value.ToString());
}
}
我认为真正的问题就在这里,你用你的内部for
循环f < gridOperations.Rows[f].Cells.Count
我认为应该是z < gridOperations.Rows[f].Cells.Count
,因为你对这个循环的界限应该是当前行,而不是当前行的编号。
作为替代方案,由于DataGridViewRowCollection
和DataGridViewCellCollection
实现IEnumerable
接口,您可以使用foreach
循环;
foreach (DataGridViewRow rows in gridOperations.Rows)
{
foreach (DataGridViewCell cells in rows.Cells)
{
MessageBox.Show(cells.Value.ToString());
}
}