我有一个问题,我自己无法解决。在我开始之前,重要的是让你们知道
我从头到尾写的这个问题,我想让你们正确理解我的问题是什么,对于那些懒得读这个的人,请原谅我,我没有附上任何代码这里,只是逻辑
这个论坛的人可能会帮助我。但是,我已经解决了我的问题(但只有逻辑,我无法用代码证明它,不知道从哪里开始)
嗯,这是我的理由:
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)
以下是我的解决方案:
在数据库更改前获取数量的第一个值(1000)
获取按公式 Quantity in DataGridView after changes - Quantity in DataGridView before changes
从用户添加的数量值,并使用公式 Quantity in DataGridView after changes - Quantity in DataGridView before changes
但我不知道如何获得解决方案1还是2.任何人都可以帮助我吗?非常感谢你!你的回答我非常感激!
答案 0 :(得分:2)
我建议您更改设计,更改更新数据库中数量的方式。我不知道你的gridview的数据源是什么。如果是一个项目列表,每当用户更新网格中的数量时不更新数据库的更改,而只是更新数据源,可能是订单项列表中的值。只有在用户完成订单后才能更新数量,然后单击“保存”按钮。
在这种方法中,您不必维护任何先前数量的添加产品,用户可以在任何时间更新数量,您不必跟踪它,它将使您的代码变得复杂。当用户点击保存时,只需获取网格中的当前数量,然后只更新数据库。
答案 1 :(得分:0)
有许多技术可以捕获DataGridView(DGV)中任何单元格的任何变化。一种方法是利用DGV的两个事件:
这是诀窍......
您可以在使用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对我来说不够清楚,但您可以在上述位置执行以下操作:
但每次更改单元格时调用数据库可能非常耗时。所以你应该寻找任何快速的解决方案。