C# 获取更改前后datagridview中特定列的值
我有一个自己解决不了的问题。在我开始之前,让你们知道这一点很重要 这个问题是我从头到尾写的,我想让你们正确理解我的问题是什么,对于那些懒于阅读的人,请原谅我,我这里没有附加任何代码,只是逻辑 也许这个论坛的人可以帮助我。但是,我已经找到了问题的解决方案(但只有逻辑,我无法用代码证明,也不知道从哪里开始) 好吧,我的情况如下:C# 获取更改前后datagridview中特定列的值,c#,winforms,ms-access,datagridview,C#,Winforms,Ms Access,Datagridview,我有一个自己解决不了的问题。在我开始之前,让你们知道这一点很重要 这个问题是我从头到尾写的,我想让你们正确理解我的问题是什么,对于那些懒于阅读的人,请原谅我,我这里没有附加任何代码,只是逻辑 也许这个论坛的人可以帮助我。但是,我已经找到了问题的解决方案(但只有逻辑,我无法用代码证明,也不知道从哪里开始) 好吧,我的情况如下: 我在DataGridView中获得了一个Quantity列,我还获得了一个功能,用户可以在DataGridView中编辑Quantity列并自动更新数据库中的Quantit
我在DataGridView中获得了一个Quantity列,我还获得了一个功能,用户可以在DataGridView中编辑Quantity列并自动更新数据库中的Quantity值。
例如(仍在案例中):
我在数据库中的数量为1000,我在系统中的数量列中输入50的值,然后通过单击“确定”按钮添加到DataGridView,一旦单击,数据库中的数量应将其从1000更新为950。因为我使用了一个公式
valueOfQuantityInDatabase-valueOfQuantityInSystem,它更新正确且成功
我的问题是:
假设我得到了一个带有Quantity列的DataGridView,其值为50(这使数据库中的Quantity值变为950)
假设客户希望将其数量从50添加到150,因此我将DataGridView中的Quantity值从50更改为150,当我单击“确定”按钮时,数据库应根据公式更新
数据库中QuantityInDatabase的值-系统中QuantityInSystem的值,,数据库中的数量应具有850的数量值
(因为1000-150),,但这并不是我预期的,数据库中的数量值为800
(因为我第一次添加是50,所以数据库中的数量是950,接下来我再添加150,数据库中的数量是800),所以它就像第一次输入的值+第二次输入的值。
这是我想要的:
每当用户在DataGridView中编辑数量时,它都应该转到以下公式
valueOfQuantityInDatabase-valueOfQuantityInSystem----(因此,每当用户更改DataGridView中的数量值时,比方说它从50更改为150,数据库中的数量应该识别它并减去DataGridView中数量的当前值(150),而不是旧值(50)
这是我的解决方案:
更改后DataGridView中的数量-更改前DataGridView中的数量
,并使用以下公式将其相加更改后DataGridView中的数量-更改前DataGridView中的数量
但是我不知道如何获得解决方案1或2。有人能帮我吗?非常感谢!我非常感谢你的回答!我建议你改变设计,改变你在数据库中更新数量的方式。我不知道gridview的数据源是什么。如果是项目列表,每当用户在网格不会更新对数据库的更改,而只是更新数据源,可能是订单项目列表中的值。只有当用户完成订单并单击“保存”按钮时,才应更新数量
在这种方法中,您不必维护以前添加的产品的任何数量,用户可以随时更新数量,您不必跟踪它,这将使您的代码变得复杂。当用户单击“保存”时,只需在网格中获取当前数量,并只需更新数据库。有许多技术可以捕获一个在DataGridView(DGV)中的任何单元格中进行y更改。一种方法是利用DGV的两个事件:
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
- 将其存储回数据库
但是每次单元格更改时调用数据库可能非常耗时。因此,您应该寻找任何快速的解决方案。是的,我已经可以获得网格中的当前数量,但我的问题是,在进行任何更改之前,我想根据数据库中的数量更新数据库。那么,更改是什么意思e?仅更改datagridview的逻辑或更改datagridview的整个设计?现在如何更新数据库中的数量?每次用户更改网格中的数量时,您也会更新数据库中的数量?是的,当用户向datagridview添加数据时,它会更新数据库中的数量,并将整个数据添加到表中,并显示it作为datagridview。当用户在datagridview中编辑数据时(当进行更改时),数据库中的数量将被更新。不建议使用这种方法。这很复杂。将项目列表绑定到网格,并添加保存按钮,并且仅当用户单击保存按钮时更新对数据库的更改,只要用户c