C#:如何获取未绑定的DataGridView单元格的值?

时间:2017-04-03 21:41:36

标签: c# datagridview

我是C#的新手。我已经看到了回答如何在未绑定网格中设置值的问题。这似乎有效。但是,为了获得价值,似乎并没有。我确实试着寻找答案。

我有一个未绑定的DataGridView,名为analogGrid。数据存储在外部类RTUdata中。它是一个非常简单的网格,第一列只读取行号。第二个值是用户可以更改的值,应该将其存储回RTUdata。使用此方法将数据加载到网格中似乎可以正常工作:

private void loadAnalog()
{
    analogGrid.RowCount = RTUdata.getAnalogCount(RTUdata.getRTUaddr());
    for (UInt16 i = 0; i < RTUdata.getAnalogCount(RTUdata.getRTUaddr()); i++)
    {
        analogGrid.Rows[i].Cells[0].ValueType = typeof(System.UInt16);
        analogGrid.Rows[i].Cells[0].Value = i;
        analogGrid.Rows[i].Cells[1].ValueType = typeof(System.Int32);
        analogGrid.Rows[i].Cells[1].Value = RTUdata.getAnalogValue(RTUdata.getRTUaddr(), i);
    }
}

我不太确定哪个事件应该挂钩到何时获取用户输入的值并将其放回RTUdata中。但是,我猜它会是CellValidated()。所以,我有这个代码:

private void analogGrid_CellValidated(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex != 1)
        return;

    Int32 value = (Int32)binaryGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
    RTUdata.setAnalogValue(RTUdata.getRTUaddr(), e.RowIndex, value);        
}

但是,就行了

Int32 value = (Int32)binaryGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

我收到运行时错误“System.InvalidCastException:'指定的强制转换无效。'”据我所知,“Value”应该是Int32,我在加载网格时设置值类型。那么,为什么演员表没有效?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可能正在尝试将字符串值强制转换为int,这将无效。而是将其转换为.ToString()

试试这个:

Int32 value = Int32.Parse(binaryGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());