winform下怎么样判断datagridview中的新增、删除、修改状态

.Net技术 码拜 8年前 (2016-04-30) 3351次浏览
在datagridview中的进行新增行、删除行、修改行操作,通过按钮button进行统一判断,需要判断哪些行是新增、被删除行、被修改,然后再提交给服务器
代码入下 定义一个
DataTable dt = new DataTable();
然后赋值如
dt=bll.GetDrList(txtCustOrderId.Text.Trim()).Tables[0];
dataGridView1.DataSource = dt;
现在判断DataRowState的状态来执行不同的方法

DataTable cdt = dt.GetChanges();
for (int i = 0; i < cdt.Rows.Count; i++)
{
if (cdt.Rows[i].RowState == DataRowState.Deleted)
{
删除方法
}
else if (cdt.Rows[i].RowState == DataRowState.Modified)
{
更新方法
}
else if (cdt.Rows[i].RowState == DataRowState.Added)
{
新增方法
}
但是有一种情况   例如 用户将某行删除了  然后又添加了一行一样的数据,这个时候提示  不能通过已删除的行访问该行的信息
怎么样解决呢?
解决方案

5

代码不能充分看出问题所在,你可以本人搜索“不能通过已删除的行访问该行的信息”,有很多相似解决方法

5

引用:
Quote: 引用:

上面无视,混了些奇怪的东西
for (int i = cdt.Rows.Count – 1; i >= 0; i–)

这个方法不行吧
通过按钮button进行统一判断,需要判断哪些行是新增、被删除行、被修改,然后再提交给服务器

循环的方向和你说的有关系吗?

10

引用:

在datagridview中的进行新增行、删除行、修改行操作,通过按钮button进行统一判断,需要判断哪些行是新增、被删除行、被修改,然后再提交给服务器
代码入下 定义一个
DataTable dt = new DataTable();
然后赋值如
dt=bll.GetDrList(txtCustOrderId.Text.Trim()).Tables[0];
dataGridView1.DataSource = dt;
现在判断DataRowState的状态来执行不同的方法

DataTable cdt = dt.GetChanges();
for (int i = 0; i < cdt.Rows.Count; i++)
{
if (cdt.Rows[i].RowState == DataRowState.Deleted)
{
删除方法
}
else if (cdt.Rows[i].RowState == DataRowState.Modified)
{
更新方法
}
else if (cdt.Rows[i].RowState == DataRowState.Added)
{
新增方法
}
但是有一种情况   例如 用户将某行删除了  然后又添加了一行一样的数据,这个时候提示  不能通过已删除的行访问该行的信息
怎么样解决呢?

你的思路错了,由于 DataGridView 是绑定数据源 DataTable 的
所以你需要知道的是 DataTable 中的数据状态

var table = new DataTable();
table.GetChanges(DataRowState.Added);
table.GetChanges(DataRowState.Deleted);
table.GetChanges(DataRowState.Modified);

5

引用:

不是同一行  是datatable里面就会有两行  分别状态是Deleted 和 Added
例如 有个表
物料     数量
A          1000
B           2000
C           3000
假设用户将物料C删除了  这个时候datatable里面有一行是 Deleted
这个时候用户发现删除错误了  然后又将这条记录添加上去了
这个时候又多了一行是Added
最后用户点保存的时候判断行的状态  会执行两种状态
实际上是本人希望用户用户将物料C记录删除了 后来又增加了C     本人希望DataTable不要增加行
只将原来那行物料为C标记为 Deleted的回滚  不知道大家明白本人的意思没

明白的
table.Rows[index].RejectChanges();

5

给你个建议,仅供参考
添加个撤销按钮,点击之后弹出一个模式窗口,
窗口中加载 table.GetChanges(Deleted); 方法获取的已删除行,
对选择的行使用 row.RejectChanges()

5

纠结这干什么?
这…..十几年前,还没有,
十几年后呢?
http://bbs.csdn.net/topics/391978734?page=2#post-401320344

1.
假如datatable 中有一个GUID字段作为 MainKey
就不会提示[不能通过已删除的行访问该行]吧?
2.
[datatable]只是net数据库标准操作的一个组件, 你想将deleted的恢复的操作不是标准操作的一部分呀.
直接将deleted的,remove……?

5

你的需求是很正常的,但你的实现是很奇异的
连数据库系统对 增、删、改 的反悔,都要借助日志来实现
而你却只指望通过几个标志位来实现
增加 还好说,修改、删除 后没有原始数据的副本你怎么样得以还原?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明winform下怎么样判断datagridview中的新增、删除、修改状态
喜欢 (0)
[1034331897@qq.com]
分享 (0)