我有一个看起来像这样的DGV:
DGV中的每一行都是数据库表中的一条记录。
我需要允许用户编辑所需的任何单元格,然后在按钮上单击以使用新值更新数据库。 (有一个隐藏列保存记录的数据库表ID。)
我知道我可以通过在CellEnter事件上读取它来获取单元格的旧值,然后在CellLeave上获取新值(至少这是我知道的操作方式),但这仅适用于一个单元格。如何一次为多个单元完成此操作?我曾经想过要创建一个多维数组来存储行和列索引以及每个已编辑单元格的新值和旧值,然后通读该数组以更新数据库。但是我不确定这是最好的方法。
我想到的另一个选项是遍历DGV中的每个单元格,但是这样做我是否能够在用户编辑的单元格中同时获得旧值和新值?
答案 0 :(得分:0)
比您想象的要容易。 无需遍历DGV。如果将其绑定到数据表(或数据集),只需让用户在网格中输入和更改数据,数据表就会自动更新。
我知道我可以通过读取单元格上的旧值来获取它 CellEnter事件,然后在CellLeave上获取新值
不必要。使用数据表,您可以访问单元格的原始值和新值,并进行比较。参见datarowversion
。但是,如果您只想知道修改了哪些行,则可以只使用datarowstate
函数。
然后,要更新后端数据库上的数据,可以使用SqlDataAdapter
。
出于验证目的,您可能需要在数据表和网格上有一些约束(例如,如果某些单元格可能不为空)。但是总的来说,几乎不需要直接访问DGV。而是使用数据源。