我是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,我在加载网格时设置值类型。那么,为什么演员表没有效?
感谢您的帮助!
答案 0 :(得分:1)
您可能正在尝试将字符串值强制转换为int,这将无效。而是将其转换为.ToString()
。
试试这个:
Int32 value = Int32.Parse(binaryGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());