【发布时间】:2017-04-03 21:41:35
【问题描述】:
我是 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: 'Specified cast is not valid.'”的运行时错误据我所知,“Value”应该是 Int32,我在加载网格时设置了值类型。那么,为什么演员表无效?
感谢您的帮助!
【问题讨论】:
-
您确定从单元格中读取的值是整数吗?也许它的字符串,您需要将其转换为整数,而不是强制转换。
-
(FACEPALM) 实际上我确实尝试过以这种方式获取字符串:“binaryGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].ToString()”需要。但我没有尝试“...Value.Tostring()”。这就是问题所在。我想我认为单元格类型应该仍然是 UInt32,因为我将其指定为类型。
-
不用担心。我敢肯定我做得更糟!
标签: c# datagridview