繁体   English   中英

C#DataGrid自动将值写入数据库

[英]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:

Tbl对象

我已经在此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是这会触发更新的发生,因此再次调用事件,然后递归运行该方法。

在REMARK文章中找到的信息: msdn上的此站点

他们提供了指向网站的链接以获取更多信息。 也许您会在这里找到答案。

至于您的问题的解决方案,看来您可以忽略您的事件,而只需调用update命令。 我不确定这个原因,因为我没有时间检查这个问题,而且在这个问题上经验不足。

好吧,希望这对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM