在更改之前和之后获取数据网格视图中特定列的值
本文关键字:视图 网格 数据网 数据 获取 之后 | 更新日期: 2023-09-27 18:33:04
我有一个问题,我自己无法解决。在我开始之前,重要的是要让你们知道
这个问题我从头到尾都写了,我想让你们好好理解我的问题是什么,对于那些懒得看这个的人,请原谅我,我在这里没有附加任何代码,只是逻辑
也许这个论坛上的人可以帮助我。但是,我已经得到了我的问题的解决方案(但只有逻辑,我无法通过代码证明它,也不知道从哪里开始(
好吧,这是我的情况:
I got a Quantity column in DataGridView, and i got a feature where user could edit the Quantity column in DataGridView and automatically updating the Quantity value in the Database.
例如(仍然在这种情况下(:
I have 1000 on Quantity in the Database, and i enter the value of 50 in the Quantity column in system and after that i add to the DataGridView by clicking a "OK" button, once clicked, the Quantity in the Database should update it Quantity become 950, from 1000. Because i use a formula
valueOfQuantityInDatabase - valueOfQuantityInSystem, it update properly and successful
这是我的问题:
Let's say i got a DataGridView with Quantity column and the value of it is 50
(这使得数据库中的 Quantity 值变为 950( and let's say customer want to add his Quantity from 50 to 150, so i change the value of Quantity in DataGridView to 150 from 50, and when i click "OK" button, the Database should update based on the formula
valueOfQuantityInDatabase - valueOfQuantityInSystem, and the Quantity in Database should have 850 in Quantity value
(因为 1000 - 150(but it is not as i expected, the Quantity value in database is 800
(因为我第一次添加是 50,所以数据库中的数量是 950,接下来我再添加 150,数据库中的数量是 800(,so it is like first entered value + second entered value.
这是我想要的:
Whenever user edit the Quantity in DataGridView, it should goes to this formula
valueOfQuantityInDatabase - valueOfQuantityInSystem ------ (因此,每当用户更改 DataGridView 中的 Quantity 值时,假设它从 50 更改为 150,数据库中的数量应该识别它并减去 DataGridView 中 Quantity 的当前值 (150(,而不是旧的 (50(
这是我附带的解决方案:
-
获取更改之前数据库中数量的第一个值 (1000(
-
获取通过公式
Quantity in DataGridView after changes - Quantity in DataGridView before changes
从用户添加的数量值, 并使用公式Quantity in DataGridView after changes - Quantity in DataGridView before changes
加上
但是我不知道如何获得解决方案1或2。谁能帮我?谢谢!您的回答我非常感谢!
我建议您更改设计,更改更新数据库中数量的方式。我不知道您的网格视图的数据源是什么。如果是项目列表,每当用户更新网格中的数量时,不要更新对数据库的更改,而只是更新数据源,可能是订单项列表中的值。数量应仅在用户完成订单并单击"保存"按钮时更新。
在这种方法中,您不必维护添加产品的任何先前数量,用户可以更新任意数量的时间,您不必跟踪它,这将使您的代码变得复杂。 当用户单击"保存"时,只需获取网格中的当前数量,然后更新数据库。
有许多技术可以捕获 DataGridView (DGV( 中任何单元格中的任何更改。一种方法是利用DGV的两个事件:
- 单元格开始编辑
- 单元格结束编辑
这是诀窍...
您可以在使用 DGV 计算值的类中声明两个私有字段(let、_oldValue 和 _newValue(。那么 2 个事件的订阅可以如下所示:
private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
_oldValue = dataGridView[e.ColumnIndex, e.RowIndex].Value;
}
private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
_newValue = dataGridView[e.ColumnIndex, e.RowIndex].Value;
if (_newValue != _oldValue)
{
// YOUR LOGIC SHOULD START FROM HERE
}
}
现在我专注于你的问题...
如果要实现解决方案 1,则可以将逻辑放在上述位置,以便在单元格第一次更改时保存其数据库值。
尽管解决方案2对我来说还不够清楚,但您可以在上述位置执行以下操作:
- 保存数据库值
- 从数据库值中扣除_newValue
- 将其存储回数据库
但是,每次单元格更改时调用数据库可能非常耗时。因此,您应该寻找任何快速的解决方案。