写点东西感觉特别累,也已经很久没写了。

最近在做一个winform类型的系统,其涉及到大量的表,有些表又包含大量的字段,所以当添加、更新实体时便会十分的繁琐,一方面:需要把界面上的字段绑定到对应的实体(简单点就是对象)上去,另一方面:需要把字段值赋值给界面上的控件。当字段的数量到一定数量时,便费时费力。

下面是我看到一种较好的方式,自己写的示例。

1主要原理

微软为控件类写了个绑定方法Control.DataBindings,这个方法的作用是将控件的某个属性值与对象的某个属性值进行绑定,通俗的意思是维持控件的属性值与对象的属性值相等,这就是双向绑定的意思。

2实现

定义了一个Person类,并定义一些成员,如下图所示,“喜好”字段绑定的是combox,所以它的数据源是list,list中对象定义的类型是LikeT,liket就简单的定义了显示成员与值成员。

在窗体初始化时,实例化person类为Men对象,并将其绑定到界面的控件上。当更改控件中的内容时,DataBindings会自动将其更新回Men对象。为了验证Men对象的内容是否改变,便添加了一个显示Men对象成员的按钮,点击则会将Men对象显示出来。

当我改变Name和OneDay后点击显示Men按钮

3实现代码如下

public Person Men { get; set; }
public IList<LikeT> AllLikes { get; set; }
public Form1()
{
InitializeComponent();

Men = new Person
{
Name = "mine",
IsAdult = true,
IsSpecial = "是",
Like = "1",
OneDay = DateTime.Now,
Introduce = "share one technolog"
};

AllLikes = new List<LikeT>
{
new LikeT() {ShowNumber = "a book", ValueNumber = "1"},
new LikeT() {ShowNumber = "a person", ValueNumber = "2"},
new LikeT() {ShowNumber = "a point", ValueNumber = "3"}
};

textBox1.DataBindings.Add("Text", Men, "Name");
checkBox1.DataBindings.Add("Checked", Men, "IsAdult");
dateTimePicker1.DataBindings.Add("Value", Men, "OneDay");
//下拉选择框
comboBox1.DataSource = AllLikes;
comboBox1.DisplayMember = "ShowNumber";
comboBox1.ValueMember = "ValueNumber";
comboBox1.DataBindings.Add("SelectedValue", Men, "Like");
textBox2.DataBindings.Add("Text", Men, "Introduce");
//自定义数据格式,有兴趣可以看看
Binding b = new Binding("Checked", Men, "IsSpecial");
// Add the delegates to the event.
b.Format += new ConvertEventHandler(StringToBool);
b.Parse += new ConvertEventHandler(BoolToString);
checkBox2.DataBindings.Add(b);
}
private void StringToBool(object sender, ConvertEventArgs cevent)
{
// The method converts only to string type. Test this using the DesiredType.
if (cevent.DesiredType != typeof(bool)) return;

// Use the ToString method to format the value as currency ("c").
cevent.Value = cevent.Value.ToString() == "是";
}

private void BoolToString(object sender, ConvertEventArgs cevent)
{
// The method converts back to decimal type only.
if (cevent.DesiredType != typeof(string)) return;

// Converts the string back to decimal using the static Parse method.
if ((bool)cevent.Value)
{
cevent.Value = "是";
}
else cevent.Value = "否";
}

private void button1_Click(object sender, EventArgs e)
{
l_Men.Text = JsonConvert.SerializeObject(Men);
}

4说明

person有个IsSpecial字段,这个字段如果类型设计为bool类型,那么如同IsAdult一样简单,但是我项目的数据库设计为String类型,且字段长度为vachar2,存不下true或者false,存0或者1也许可以吧,但不知道对接的时候有没有问题,所以我就强制让是否来代替true或者false。

意识仅为个人看法,如果不当,希望能给我打几个字,衷心感谢。

winform 数据(双向)绑定 快速更新实体的更多相关文章

  1. 我的angularjs源码学习之旅3——脏检测与数据双向绑定

    前言 为了后面描述方便,我们将保存模块的对象modules叫做模块缓存.我们跟踪的例子如下 <div ng-app="myApp" ng-controller='myCtrl ...

  2. Angular数据双向绑定

    Angular数据双向绑定 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.Angul ...

  3. vuejs数据双向绑定原理(get & set)

    前端的数据双向绑定指的是view(视图)和model(数据)两者之间的关系:view层是页面上展示给用户看的信息,model层一般是指通过http请求从后台返回的数据.view到model的绑定都是通 ...

  4. 如何在原生微信小程序中实现数据双向绑定

    官网:https://qiu8310.github.io/minapp/ 作者:Mora 在原生小程序开发中,数据流是单向的,无法双向绑定,但是要实现双向绑定的功能还是蛮简单的! 下文要讲的是小程序框 ...

  5. 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分

    最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...

  6. Vue数据双向绑定原理及简单实现

    嘿,Goodgirl and GoodBoy,点进来了就看完点个赞再go. Vue这个框架就不简单介绍了,它最大的特性就是数据的双向绑定以及虚拟dom.核心就是用数据来驱动视图层的改变.先看一段代码. ...

  7. 深入理解Proxy 及 使用Proxy实现vue数据双向绑定

    阅读目录 1.什么是Proxy?它的作用是? 2.get(target, propKey, receiver) 3.set(target, propKey, value, receiver) 4.ha ...

  8. 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定

    前言: 学习前端也有半年多了,个人的学习欲望还比较强烈,很喜欢那种新知识在自己的演练下一点点实现的过程.最近一直在学vue框架,像网上大佬说的,入门容易深究难.不管是跟着开发文档学还是视频教程,按步骤 ...

  9. vue数据双向绑定原理

    vue的数据双向绑定的小例子: .html <!DOCTYPE html> <html> <head> <meta charset=utf-> < ...

随机推荐

  1. HDU - 1253 胜利大逃亡 (搜索)

    Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0 ...

  2. 配置中心Apollo搭建全过程

    总体架构 用户在Portal操作配置发布 Portal调用Admin Service的接口操作发布 Admin Service发布配置后,发送ReleaseMessage给各个Config Servi ...

  3. V - Can you answer these queries? HDU - 4027 线段树 暴力

    V - Can you answer these queries? HDU - 4027 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号. 然后稍微看了一下题解,因为每一个数开根号最多开 ...

  4. SpringBoot:扩展SpringMVC、定制首页、国际化

    目录 扩展使用SpringMVC 如何扩展SpringMVC 为何这么做会生效(原理) 全面接管SpringMVC 首页实现 页面国际化 SpringBoot扩展使用SpringMVC.使用模板引擎定 ...

  5. PI/PO Token配置

    接收方通道配置 因为本例中需要在访问业务接口时,获取某平台的TOKEN认证,并在调用业务接口时,将TOKEN一同传给某平台,但是不能放在请求参数中,而是放在HTTP的Headers 注意!是Heade ...

  6. 武装你的WEBAPI-OData入门

    本文属于OData系列 目录(可能会有后续修改) 武装你的WEBAPI-OData入门 武装你的WEBAPI-OData便捷查询 武装你的WEBAPI-OData分页查询 武装你的WEBAPI-ODa ...

  7. MATLAB1127(传递函数)

    sys=tf(400,[1,50,0]) sys = 400 ---------- s^2 + 50 s 其中,tf()函数的用法.   传递函数 dsys=c2d(sys,ts,'z') dsys ...

  8. [codeforces 200 E Tractor College]枚举,扩展欧几里得,三分

    题目出自 Codeforces Round #126 (Div. 2) 的E. 题意大致如下:给定a,b,c,s,求三个非负整数x,y,z,满足0<=x<=y<=z,ax+by+cz ...

  9. iOS中的事件响应链、单例模式、工厂模式、观察者模式

    学习内容 欢迎关注我的iOS学习总结--每天学一点iOS:https://github.com/practiceqian/one-day-one-iOS-summary iOS中事件传递和相应机制 i ...

  10. 07JAVA基础面向对象-继承/多态

    一.继承 1.概念 子类的共性 重用现有类并在此基础上进行扩展 public class 子类 extends 父类{} 2.继承中的成员访问 成员变量 成员方法 局部->本类中成员变量-> ...