获取datagridview的值时出错

时间:2013-05-26 14:10:38

标签: c# datagridview

我有一个关于用户控件的数据网格,“修饰符”是公开的。我有以下代码:

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个项目,所以有单元格,我只是不明白它为什么不让我访问它们。谢谢!

3 个答案:

答案 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,因为你对这个循环的界限应该是当前行,而不是当前行的编号。

作为替代方案,由于DataGridViewRowCollectionDataGridViewCellCollection实现IEnumerable接口,您可以使用foreach循环;

foreach (DataGridViewRow rows in gridOperations.Rows)
{                            
    foreach (DataGridViewCell cells in rows.Cells)
    {
        MessageBox.Show(cells.Value.ToString());
    }
}