在更改之前和之后获取数据网格视图中特定列的值

本文关键字:视图 网格 数据网 数据 获取 之后 | 更新日期: 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 - valueOfQuantityInSystemit 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 - valueOfQuantityInSystemand 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(

这是我附带的解决方案:

  1. 获取更改之前数据库中数量的第一个值 (1000(

  2. 获取通过公式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的两个事件:

  1. 单元格开始编辑
  2. 单元格结束编辑

这是诀窍...

您可以在使用 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
  • 将其存储回数据库

但是,每次单元格更改时调用数据库可能非常耗时。因此,您应该寻找任何快速的解决方案。