在更改之前和之后获取datagridview中某个列的值

时间:2013-09-28 08:47:58

标签: c# winforms ms-access datagridview

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

我从头到尾写的这个问题,我想让你们正确理解我的问题是什么,对于那些懒得读这个的人,请原谅我,我没有附上任何代码这里,只是逻辑

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

嗯,这是我的理由:

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 - 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)< / strong>,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(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

  3. 但我不知道如何获得解决方案1还是2.任何人都可以帮助我吗?非常感谢你!你的回答我非常感激!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

  1. CellBeginEdit
  2. CellEndEdit
  3. 这是诀窍......

    您可以在使用DGV计算值的类中声明两个私有字段(let,_oldValue&amp; _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
    • 将其存储回数据库

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