0

我有一个我无法自己解决的问题。在我开始之前,让你们知道这一点很重要

这个问题是我从头到尾写的,想让大家明白我的问题是什么,懒得看的请见谅,这里不附代码,只附逻辑

可能这个论坛的人可以帮助我。但是,我已经找到了解决问题的方法(但只有逻辑,我无法通过代码证明,也不知道从哪里开始)

好吧,这是我的情况:

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 (这使得数据库中的数量值变为 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,数据库中的 Quantity 应该识别它并减去 DataGridView 中 Quantity 的当前值(150),不是年长的 (50)

这是我附带的解决方案:

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

  2. 获取用户通过公式添加的数量值, Quantity in DataGridView after changes - Quantity in DataGridView before changes 并将其与公式相加 Quantity in DataGridView after changes - Quantity in DataGridView before changes

但我不知道如何获得解决方案 1 或 2。有人可以帮我吗?非常感谢!你的回答我非常感谢!

4

2 回答 2

2

我建议您更改设计,更改更新数据库中数量的方式。我不知道您的 gridview 的数据源是什么。如果它是一个项目列表,那么每当用户更新网格中的数量时,不会更新对数据库的更改,而只是更新数据源,可能是订单项目列表中的值。仅当用户完成订单并单击保存按钮时,才应更新数量。

在这种方法中,您不必维护任何先前添加的产品数量,用户可以随时更新数量,您不必跟踪它,这会使您的代码变得复杂。当用户单击保存时,只需获取网格中的当前数量并更新数据库。

于 2013-09-28T09:20:45.630 回答
0

有许多技术可以捕获 DataGridView (DGV) 中任何单元格中的任何更改。一种方法是利用 DGV 的两个事件:

  1. CellBegin编辑
  2. CellEnd编辑

这里是诀窍...

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

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

于 2013-09-29T13:55:50.437 回答