我有一个DataGridView . 一些单元从串口接收数据:我想将数据推入单元,并让它更新底层绑定对象 .
我正在尝试这样的事情:
SetValueFromSerial (decimal newValue)
{
dataGridView.CurrentCell.Value = newValue;
}
使用字符串没有帮助:
dataGridView.CurrentCell.Value = newValue.ToString ();
在这两种情况下,我都没有在网格中看到任何内容,并且基础值没有变化 .
我在谷歌搜索并在这里搜索,但我并没有完全懒惰 . )
14 回答
试试这种方式:
需要写两次......
以下作品 . 我可能会弄错,但添加一个
String
值并没有尝试或尝试任何黑客攻击) .如果
DataGridView
是数据绑定,则不应直接修改单元格的内容 . 相反,您应该修改数据绑定对象 . 您可以通过DataGridViewRow
的DataBoundItem
访问该对象:请注意,绑定对象应实现
INotifyPropertyChanged
,以便更改反映在DataGridView
中如果您不想出于某种原因修改数据绑定对象(例如,您希望在网格中显示某些视图,但不希望它作为数据源对象的一部分),您可能希望这样做:
1.手动添加列:
2.在DataBindingComplete事件中执行以下操作:
(只是一个愚蠢的例子)
但请记住,IT必须在DataBindingComplete中,否则值将保持空白
你还记得refresh dataGridView吗?
我有与sql-dataadapter相同的问题来更新数据等等
以下对我很好
我搜索了如何插入新行的解决方案以及如何像Excel一样设置其中单元格的各个值 . 我解决了以下代码:
注意:
以前我在设计模式下设计了列 .
我已经从datagridview的属性将行 Headers 可见性设置为false .
最后一行很重要:当你直接给出datagridview的索引时,第一个数字是单元格号,第二个是行号!记住它!
希望这可能对你有所帮助 .
如果
DataGridView
已填充DataGridView
(即数据绑定),则需要更改绑定数据,而不是DataGridView单元本身 .因此,从已知行或列获取该数据的一种方法是:
我遇到了同样的问题并解决了如下的VB.NET . 它是.NET Framework,因此您应该可以适应 . 想要比较我的解决方案,现在我发现没有人似乎按我的方式解决它 .
进行现场声明 .
Private _currentDataView as DataView
因此,循环遍历所有行并搜索包含我知道的值的单元格,我想要更改的单元格旁边适用于我 .
这样你就可以更好地理解它 . 我知道ColumnName“projID”是139.我循环直到找到它然后我可以在我的案例“Comment”中更改“ColumnNameofCell”的值 . 我将此用于运行时添加的注释 .
在VB中你可以使用这个
感谢saeed serpooshan的最后一排
就像@Thomas所说,要更改的元素必须实现INotifyPropertyChanged . 但是,数据源也很重要 . 它必须是BindingList,您可以从List轻松创建 .
这是我的例子 - 数据源首先是DataTable,我将其传输到List然后创建BindingList . 然后我创建BindingSource并使用BindingList作为BindingSource的DataSource . 最后,DataGridView的DataSource使用这个BindingSource .
同样重要的是:每个类的成员setter必须调用OnPropertyChanged() . 没有它,它将无法工作 . 所以,我的 class 看起来像这样:
有关此主题的更多信息:http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx
在第一次它进展顺利,但按第二次它给我错误“索引超出范围 . 必须是非负的,小于集合的大小 . 参数名称:索引”但当我点击单元格时出现另一行然后它适用于下一行,并继续......
我尝试了很多方法,唯一有效的方法是UpdateCellValue:
我希望能有所帮助 . =)