首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >.NET复合绑定还原更改

.NET复合绑定还原更改
EN

Stack Overflow用户
提问于 2013-11-30 05:50:57
回答 1查看 163关注 0票数 0

我正在对复杂的.NET数据库进行一些测试,为了回滚用户所做的更改,我需要得到一些建议。例如,让我们假设我的BL层中有两个类:

" person“代表核心person对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
internal class Person{
  public String Name{get; set;}            
  public String Surname{get; set;}
  public int Age { get; set; }
 }

"PeopleList“表示person对象的列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
internal class PeopleList : List<Person> {

//Let's assume that this class has a whole bunch of function with a complex business logic in it.

    public Person[] getPeopleByName(String name)
    {
        return this.Where(x => String.Compare(name, x.Name, true) == 0).ToArray(); 
    }

    public Person[] getPeopleByAge(int age)
    {
        return this.Where(x => x.Age.Equals(age)).ToArray();
    }
}

现在,我想让用户通过带有PeopleList的表单编辑DataGridView对象的实例。因此,我创建了一个windows窗体应用程序,并在Load()事件中执行了以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 private void frmTest_Load(object sender, EventArgs e)
        {

            //Intialize _peopleList object 
            _peopleList = new PeopleList();
            this.initializePeopleWithTestData();

            //Initialize _peopleBindingList by passing PeopleList (it inherits from List<Of ?> and it implements IList interface)
            this._peopleBindingList = new BindingList<Person>( _peopleList);

            //Initialize _peopleBindingSource 
            this._peopleBindingSource = new BindingSource();
            this._peopleBindingSource.DataSource = this._peopleBindingList;
            this._peopleBindingSource.SuspendBinding(); //Let's suspend binding to avoid _peopleList to be modified. 

            //Set peopleBindingList as DataSource of the grid
            this.dgwPeople.DataSource = _peopleBindingSource;
        }

使用上述代码,我可以看到/编辑/删除/添加dgwPeople中的人员(这是我的数据视图),但即使我在BindingSource上调用了"SuspendBinding()“,如果用户编辑网格,绑定系统也会立即影响到包含到SuspendBinding对象中的数据!这是不好的,因为这样我就失去了原始版本的数据,如果用户决定取消更改,我就不能再回滚它们了。

在简单的绑定中,有一个奇妙的属性"DataSourceUpdateMode“,可以让我决定绑定何时必须影响数据源。如果将其设置为“从不”,则必须显式调用Write()方法来提交更改。对于复杂的绑定有类似的东西吗?

如何避免在复杂绑定中立即绑定以影响原始数据?是否有任何方法回滚更改(除了保留原始对象的克隆副本)?有什么模式可以帮助处理这种情况吗?

您可以下载我的测试解决方案(VS2012) 这里

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-30 06:35:24

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
internal class Person, iNotifyPropertyChanged
{
  // todo implement NotifyPropertyChanged 
  private string name;
  private string nameOrig;
  public String Name
  {
     get {return name; } 
     set 
     {
        if (name == value) return;
        name = value;
        NotifyPropertyChanged("Name");
     }
  }
  public void RollBack() { Name = nameOrig; }
  public void CommitChanges()  {  nameOrig = name; }            
  public Person (string Name) { name = Name; nameOrig = name; }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20301014

复制
相关文章
【云和恩墨大讲堂】复合索引与绑定变量
讲师简介 邓秋爽(小鱼) 云和恩墨专家,有超过5年超大型数据库专业服务经验,擅长oracle 数据库优化、SQL优化和troubleshooting 今晚的恩墨大讲堂将有我为大家分享SQL审核中的两个
数据和云
2018/03/06
1.1K0
【云和恩墨大讲堂】复合索引与绑定变量
ASP.NET中绑定枚举类型
在项目开发中好多地方用了枚举,要把枚举显示到下拉列表框中我们平常的方法就是在下拉列表控件中一个一个添
Java架构师必看
2021/03/22
1K0
asp.net dropdownlist绑定省份_droplist
<asp:DropDownList runat=”server” ID=”ddl_GetThailandProvinceList” class=”form-select” aria-label=”Default select example” ></asp:DropDownList>
全栈程序员站长
2022/11/08
4280
ASP.NET WebAPI 中的参数绑定
当 WebAPI 调用 Controller 上的方法时, 必须为其参数赋值, 这个过程就是参数绑定。 本文介绍 WebAPI 如何绑定参数, 以及如何进行自定义。
beginor
2020/08/10
2.6K0
【Jqurey EasyUI+Asp.net】—DataGrid增加、删、更改、搜
在前面写了两,但不知道如何完成,对比刚刚开始学这个,他们摸着石头过河,一步步。在最后两天DataGridCRUD融合在一起。因此份额。我希望像我这样谁是刚刚开始学习一些帮助。
全栈程序员站长
2022/07/06
1.4K0
如何更改Json.NET的序列化规则
我想要使序列化出来的JSON都是小写,可以通过建立 LowercaseContractResolver:DefaultContractResolver
javascript.shop
2019/09/04
1.3K0
ASP.NET Core Blazor Webassembly 之 数据绑定
上一次我们学习了Blazor组件相关的知识(Asp.net Core Blazor Webassembly - 组件)。这次继续学习Blazor的数据绑定相关的知识。当代前端框架都离不开数据绑定技术。数据绑定技术以数据为主导来驱动UI界面,用户对数据的修改会实时提现在UI上,极大的提高了开发效率,让开发者从繁琐的dom操作中解脱出来。对于数据绑定.NET开发者并不会陌生,WPF里大量应用数据绑定技术,有过WPF开发经验的同学其实很容易理解前端的数据绑定。总之数据绑定技术及其概念、思维极其重要。下面让我们看看Blazor的数据绑定技术。
MJ.Zhou
2020/06/19
4.9K1
ModelBinder——ASP.NET MVC Model绑定的核心
Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数。通过前面的介绍我们知道Action方法的参数通过ParameterDescriptor来描述,ParameterDescriptor的BindingInfo属性表示的ParameterBindingInfo对象具有一个名为ModelBinder的组件用于完成针对当前参数的Model绑定。ModelBinder可以看成是整个Model绑定系统的核心,我们先来认识这个重要的组件。[本文已经同步到《How ASP.NET MVC Wo
蒋金楠
2018/02/08
2.4K0
ModelBinder——ASP.NET MVC Model绑定的核心
ASP.NET重用代码技术 – 代码绑定技术
作者:苏红超   导读 代码绑定是ASP.NET提供的一个重要的新技术。本文将会为您展示如何数据库
Java架构师必看
2020/10/26
4.3K0
如何在 .Net 7 中将 Query 绑定到数组
在 .Net 7 中,我们可以通过绑定数组的方式来接收来自查询字符串的参数。这样就不需要再使用逗号分隔的字符串来获取参数了。
newbe36524
2023/08/23
1440
VBA解析复合文档02——复合文档结构
尽量用一些通俗的语言来讲一下复合文档的结构,如果要真正掌握每一个细节,还是要看官方的文档,所以这里讲的可能不会完全正确,只是大概了解一下复合文档的结构逻辑。
xyj
2020/08/03
1.2K0
asp.net web项目 绑定ip地址运行方式
解决方案下面查找文件夹路径 /.vs/config/applicationhost.config中找到如下节点
郑小超.
2022/11/02
1.5K0
ASP.NET Web API编程——模型验证与绑定
1.模型验证 使用特性约束模型属性 可以使用System.ComponentModel.DataAnnotations提供的特性来限制模型。 例如,Required特性表示字段值不能为空,Range特性限制数值类型的范围。 对实体类使用特性后,可以使用ModelState.IsValid来判断验证是否通过。 例: 实体: public class DataModel { public int Id { get; set; } public string Field1Nam
甜橙很酸
2018/04/18
3K0
ASP.NET Web API编程——模型验证与绑定
图像复合变换
算法:图像复合变换是指对给定的图像连续进行多次上述的平移、旋转、翻转、缩放、错切等基本变换,也称为级联变换。
裴来凡
2022/05/29
3680
图像复合变换
【MySql】复合查询
实际开发中往往数据来自不同的表,所以需要多表查询。现在我们用三张表EMP,DEPT,SALGRADE来演示多表查询。
平凡的人1
2023/10/15
2420
【MySql】复合查询
laravel复合查询
很多情况下会用到复合查询: ---- $query->orWhere('target_type','offline'); $query->where(function($query){ $query->where('use',1)->orWhere(function($query){ $query->where('use',0) ->where('expire_t
槽痞
2020/06/23
9520
复合饼图
▽ 其实这种复合饼图在数据表达与展示上与传统饼图相差无几,只是形式比较新颖,能够对局部数据突出展示,所以视觉传达效率比较高。 以下是小魔方通过参考多个渠道的信息,总结的复合饼图制作一般方法步骤: ▽
数据小磨坊
2018/04/10
1.7K0
复合饼图
MongoDB 复合索引
如下图所示,在集合的userid以及score列上创建一个复合索引,其中userid为升序,score为降序
Leshami
2018/08/13
3.1K0
MongoDB 复合索引
asp.net(C#)中Repeater嵌套绑定Repeater[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159124.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
1K0
ghost备份和还原_cgi备份还原
用Ghost手动备份系统,主要是针对组装电脑而言,至于品牌机,它都会有自己的系统恢复工具,所以不在此列。 现在很多人对在使用电脑中出现系统崩溃的故障,都会采取重装系统的办法。 其实重装系统是一件比较麻烦的事。 一切都得从头开始,尤其是安装驱动、应用程序等等,全部再装好需要花费较长的时间。 所以在这里特别建议大家,在安装完操作系统之后,对系统进行手动备份。 这样当系统出现故障不能正常启动时,就可以从光盘或U盘启动,然后将系统还原,省时省力。 现在的操作系统镜像文件都提供有Ghost程序,可以将镜像文件刻录到光盘,也可以用老毛桃制作一个U盘启动盘。
全栈程序员站长
2022/10/04
3.9K0
ghost备份和还原_cgi备份还原

相似问题

恢复合并还原

11

jQuery解除绑定,还原绑定

11

DataGridView复合绑定

20

如何将任何复合类型还原为非复合类型

21

Git还原命令拒绝恢复合并。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文