使用bindingSource 可以对数据进行修改的取消吗?

时间:2022-08-25 09:31:36
数据的修改包括了,修改,删除,新增 

但操作都没有提交到数据库

当点击“取消”后,可以还原到未修改之前吗?

15 个解决方案

#1


当然了,在后台把你的绑定函数重新运行就可以了!

#2


你可以在datatable里面做。

#3


添加: 

DataTable cart = new DataTable();
        if (Session["shopingcar"] == null)
        {
            cart.Columns.Add("商品编号", typeof(int));
            cart.Columns.Add("商品名称", typeof(string));
            cart.Columns.Add("商品单价", typeof(double));
            cart.Columns.Add("商品数量", typeof(int));
            Session["shopingcar"] = cart;
        }
        cart = (DataTable)Session["shopingcar"];
        DataRow dr = cart.NewRow();
        dr["商品编号"] = model.ID;
        dr["商品名称"] = model.产品名称;
        dr["商品单价"] = double.Parse(model.价格);
        dr["商品数量"] = 1;
        cart.Rows.Add(dr);

 

修改:

必须这样: 
DataRow   row=myTable.Rows[0]; 
row.BeginEdit(); 
row.[ "userName "]= "aa "; 
row[ "pwd "]= "121 "; 
row.EndEdit();

 

删除某行 
代码如下: 
删除第二行 
myTable.Rows.RemoveAt(1);

#4


保存的时候用foreach循环添加该table的数据到数据库

#5


BindingSource 是一个好用的功能代理,

有 
EndEdit() / CancelEdit / AddNew

可以使用.

最终的操作还是过渡到数据源上, 

直接对数据源修改也是可以的, 
BindingSource 也能感知到(数据源必须能激发变动事件)修改, 
同时反映的绑定的界面元素上,

其实真正的数据绑定能力还是来自底下的数据源,
BindingSource 只是一个一致性的数据绑定界面.

如果学习数据绑定, 可以参考 System.Data.DataView ,
DataTable 本身, 绑定能力有限.


#6


我现在已经把 dataTable绑定到 bindingSource,然后 DataGridView与bindingSource绑定在一起

现在我操作 dataGridView , 做了一引起数据的修改,但是怎样点击“取消”时,还原数据呢?

#7


取消操作的 UI 部件需要你自己提供吧
按钮, 菜单都行, 

点击后执行 BindingSource 的 CancelEdit()


那个 BindingNavigator 有没有撤销按钮, 忘记了, 记得好似没有.

#8


引用 7 楼 dobzhansky 的回复:
取消操作的 UI 部件需要你自己提供吧
按钮, 菜单都行,

点击后执行 BindingSource 的 CancelEdit()


那个 BindingNavigator 有没有撤销按钮, 忘记了, 记得好似没有.


确实 BindingNavigator 没有撤销按钮,如果只能自己写的话,貌似很难。

#9


拖入 BindingNavigator , 看看生成的代码, 增加一个按钮不是难事

我就定制了一下, 使得 BindingNavigator 的 添加和删除操作可以取消

#10


没有提交到数据库前可以的。

#11


引用 9 楼 dobzhansky 的回复:
拖入 BindingNavigator , 看看生成的代码, 增加一个按钮不是难事

我就定制了一下, 使得 BindingNavigator 的 添加和删除操作可以取消


增加一个按钮当然不难,但是怎样实现他的功能?

#12


事件中

      bindingNavigator1.BindingSource.CancelEdit();
      bindingNavigator1.Refresh();

#13


引用 12 楼 dobzhansky 的回复:
事件中

      bindingNavigator1.BindingSource.CancelEdit();
      bindingNavigator1.Refresh();


CancelEdit只能取消对当前单元格的修改。

#14


如果硬要来,
bindingNavigator1.BindingSource.DataSource 是 DataTable 还是 DataSet,

拿到他们, 调用 DataTable , DataSet 的 RejectChanges()

不过这样就强类型化了, 终端业务应用这样干可以

Framework / toolkit 最好不要这样.

#15


MSDN改版了,呵呵

刚才上去看到他对 Rejectchanges()的解释:

DataSet.RejectChanges 方法
回滚自创建 DataSet 以来或上次调用 DataSet.AcceptChanges 以来对其进行的所有更改。 


我想这个应该就是我想要的了

Dobzhansky 您觉得最好不要用这个吗? 

#1


当然了,在后台把你的绑定函数重新运行就可以了!

#2


你可以在datatable里面做。

#3


添加: 

DataTable cart = new DataTable();
        if (Session["shopingcar"] == null)
        {
            cart.Columns.Add("商品编号", typeof(int));
            cart.Columns.Add("商品名称", typeof(string));
            cart.Columns.Add("商品单价", typeof(double));
            cart.Columns.Add("商品数量", typeof(int));
            Session["shopingcar"] = cart;
        }
        cart = (DataTable)Session["shopingcar"];
        DataRow dr = cart.NewRow();
        dr["商品编号"] = model.ID;
        dr["商品名称"] = model.产品名称;
        dr["商品单价"] = double.Parse(model.价格);
        dr["商品数量"] = 1;
        cart.Rows.Add(dr);

 

修改:

必须这样: 
DataRow   row=myTable.Rows[0]; 
row.BeginEdit(); 
row.[ "userName "]= "aa "; 
row[ "pwd "]= "121 "; 
row.EndEdit();

 

删除某行 
代码如下: 
删除第二行 
myTable.Rows.RemoveAt(1);

#4


保存的时候用foreach循环添加该table的数据到数据库

#5


BindingSource 是一个好用的功能代理,

有 
EndEdit() / CancelEdit / AddNew

可以使用.

最终的操作还是过渡到数据源上, 

直接对数据源修改也是可以的, 
BindingSource 也能感知到(数据源必须能激发变动事件)修改, 
同时反映的绑定的界面元素上,

其实真正的数据绑定能力还是来自底下的数据源,
BindingSource 只是一个一致性的数据绑定界面.

如果学习数据绑定, 可以参考 System.Data.DataView ,
DataTable 本身, 绑定能力有限.


#6


我现在已经把 dataTable绑定到 bindingSource,然后 DataGridView与bindingSource绑定在一起

现在我操作 dataGridView , 做了一引起数据的修改,但是怎样点击“取消”时,还原数据呢?

#7


取消操作的 UI 部件需要你自己提供吧
按钮, 菜单都行, 

点击后执行 BindingSource 的 CancelEdit()


那个 BindingNavigator 有没有撤销按钮, 忘记了, 记得好似没有.

#8


引用 7 楼 dobzhansky 的回复:
取消操作的 UI 部件需要你自己提供吧
按钮, 菜单都行,

点击后执行 BindingSource 的 CancelEdit()


那个 BindingNavigator 有没有撤销按钮, 忘记了, 记得好似没有.


确实 BindingNavigator 没有撤销按钮,如果只能自己写的话,貌似很难。

#9


拖入 BindingNavigator , 看看生成的代码, 增加一个按钮不是难事

我就定制了一下, 使得 BindingNavigator 的 添加和删除操作可以取消

#10


没有提交到数据库前可以的。

#11


引用 9 楼 dobzhansky 的回复:
拖入 BindingNavigator , 看看生成的代码, 增加一个按钮不是难事

我就定制了一下, 使得 BindingNavigator 的 添加和删除操作可以取消


增加一个按钮当然不难,但是怎样实现他的功能?

#12


事件中

      bindingNavigator1.BindingSource.CancelEdit();
      bindingNavigator1.Refresh();

#13


引用 12 楼 dobzhansky 的回复:
事件中

      bindingNavigator1.BindingSource.CancelEdit();
      bindingNavigator1.Refresh();


CancelEdit只能取消对当前单元格的修改。

#14


如果硬要来,
bindingNavigator1.BindingSource.DataSource 是 DataTable 还是 DataSet,

拿到他们, 调用 DataTable , DataSet 的 RejectChanges()

不过这样就强类型化了, 终端业务应用这样干可以

Framework / toolkit 最好不要这样.

#15


MSDN改版了,呵呵

刚才上去看到他对 Rejectchanges()的解释:

DataSet.RejectChanges 方法
回滚自创建 DataSet 以来或上次调用 DataSet.AcceptChanges 以来对其进行的所有更改。 


我想这个应该就是我想要的了

Dobzhansky 您觉得最好不要用这个吗?