[英]C# DataGrid automatically write values to DB
我有一个datagrid视图,它显示数据库中的表数据
环境:-C#4.0-SQL Server 2005-Visual Studio 2010
我想要的是:在逐行的基础上自动保存更改。 因此,当我编辑第一行然后离开该行时。 它应该将更改保存到数据库。
我使用了以下代码:
在From1负载中:
dataSet1.TblObject.RowChanged += rowUpdate;
事件处理程序:
private void rowUpdate(object sender, DataRowChangeEventArgs e)
{
DataRow dr = e.Row;
if (dr.RowState == DataRowState.Modified)
{
tblObjectTableAdapter.Update(dr);
}
}
当我在网格中编辑了一行后, tblObjectTableAdapter.Update(dr);
称为将数据存储到表中。 哪个好 但是事件会继续触发,就好像是递归调用一样。 所以tblObjectTableAdapter.Update(dr);
导致dataSet1.TblObject.RowChanged
事件。 但是我无法区分两者。 我猜想我使用了错误的事件来存储我的值,但是我找不到任何听起来合乎逻辑的事件。 我究竟做错了什么?
我已经制作了一个数据集xsd:
我已经在此gridview中选择了数据集作为数据源:
好的,我现在读了几次您的帖子,但是我不能直接帮助您解决您的问题。 无论如何,我都会尝试,您想要的是,当我进行更改时,它不会立即更新自身,而是将信息保存在列表中,并且当您按下按钮时,会保存更新?
然后,您应该创建一个数据行列表,并且每当更改一行时,都会将该项目添加到列表中,这样就不会直接进行更新,而仅当您按下按钮时才进行更新。 (出于性能考虑,这也更好。)
因此,而不是代码
DataRow dr = e.Row;
if (dr.RowState == DataRowState.Modified)
{
tblObjectTableAdapter.Update(dr);
}
你应该做
DataRow dr = e.Row;
if (dr.RowState == DataRowState.Modified)
{
DatarowLst.Add(dr);
}
ButtonSave_Click(object sender, eventargs e)
{
foreach (DataRow d in DatarowLst)
{
tblObjectTableAdapter.Update(d);
}
}
编辑:
抱歉,您误会了。 我现在了解您的问题,并调查了该问题。
我发现了有关数据适配器和表的一些有趣信息。 适配器似乎进行了逐行检查,以获取有关所做更改的信息。(例如,它是否需要更新或删除命令?)因此,我的GUESS是这会触发更新的发生,因此再次调用事件,然后递归运行该方法。
他们提供了指向该网站的链接以获取更多信息。 也许您会在这里找到答案。
至于您的问题的解决方案,看来您可以忽略您的事件,而只需调用update命令。 我不确定这个原因,因为我没有时间检查这个问题,而且在这个问题上经验不足。
好吧,希望这对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.