2013-05-26 21 views
0

我在用户控件上有一个datagrid,其中“修饰符”是公开的。我有以下代码:“未设置为一个对象的实例对象引用”获取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个项目,所以有细胞,我只是不明白为什么它不会让我访问它们。谢谢!

+0

你测试我的回答?有什么例外? – Damith

+0

@Damith我测试过,我仍然得到相同的例外,怪异..任何其他想法?谢谢 – Kristian

+0

如何绑定datagridview?你想要哪个列获得价值? – Damith

回答

0

试试下面

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    foreach (DataGridViewCell cell in row.Cells) 
    { 
     if (cell.Value !=null) 
     { 
      MessageBox.Show(cell.Value.ToString()); 
     } 
    } 
} 
+0

谢谢,但我得到同样的例外 – Kristian

+0

@Kristian加了空检查,请检查 – Damith

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()); 
    } 
} 
+0

谢谢!它说GridOperations不包含'Cells'的定义谢谢 – Kristian

+0

@Kristian:回答编辑... – matzone

+0

谢谢,但我仍然得到例外。数据网格使用数据源,这可能是一个问题? – Kristian

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 whihc我想应该是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()); 
    } 
} 
+0

谢谢。发生同样的nullReferenceException,第二个示例不编译(Object不包含'Cells') – Kristian

+0

@Kristian更新了第二个示例。你可以检查它。 –

+0

谢谢,但我仍然得到空例外。它只在cellID为0时有效,当它为1时,我得到异常。 – Kristian