代码入下 定义一个
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
循环的方向和你说的有关系吗?
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
连数据库系统对 增、删、改 的反悔,都要借助日志来实现
而你却只指望通过几个标志位来实现
增加 还好说,修改、删除 后没有原始数据的副本你怎么样得以还原?