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

最近在做一个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. Linux下文件完整性监控工具Tripwire详解

    Tripwire 是目前最为著名的Unix下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来.当文件现在的数字签名与保留的数字签名不一致时,那么现在 ...

  2. vue 遮罩层阻止默认滚动事件

    vue中提供 @touchmove.prevent 方法可以完美解决这个问题. <div class="child" @touchmove.prevent ></ ...

  3. 难道你现在还不知道:C/S和B/S

    随着网络技术的不断发展,各种各样的网络应用程序大爆发.运用最多的架构是基于浏览器+服务器的B/S结构,另一种是基于的 C/S结构. 概述: BS = Browser / Server =浏览器+服务器 ...

  4. 刷短视频看新闻看小说也能赚钱的几款APP

    一.抖音极速版 发啦! 刷短视频也能赚钱 第1步:下载[抖音极速版] 第2步:填我邀请码[831008243] 第3步:立刻提现最高[38元]红包 二.今日头条极速版 1元现金速撸 下载[今日头条极速 ...

  5. PLAI那些事_06 FAE

    没有了with表达,with,exp,body的id换成exp的lambda函数,从而可以没有with来进行实现.即,{with {id exp} body}换成了{{fun {id} body} e ...

  6. Redis 到底是单线程还是多线程?我要吊打面试官!

    最近在Java技术栈公众号发布的一篇文章,其中有一道题: Redis是多线程还是单线程?(回答单线程的请回吧,为什么请回,请往下看) 好些粉丝在后台问我:为什么请回,Redis不是单线程吗? 大家注意 ...

  7. 【编程之美】常用于单片机的接口适配器模式C语言实现

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/128750 ...

  8. [hdu4436 str2int]后缀自动机SAM(或后缀数组SA)

    题意:给n个数字串,求它们的所有不包含前导0的不同子串的值之和 思路:把数字串拼接在一起,构造SAM,然后以每个状态的长度len作为特征值从小到大排序,从前往后处理每个状态,相当于按拓扑序在图上合并计 ...

  9. [codeforces-543B]bfs求最短路

    题意:给一个边长为1的无向图,求删去最多的边使得从a到b距离<=f,从c到d距离<=g,a,b,c,d,f,g都是给定的,求最多删去的边数. 思路:反过来思考,用最少的边构造两条从a到b, ...

  10. 实验三 UML建模工具的安装与使用

    一. 实验目的 1) 学习使用 EA(Enterprise Architect) 开发环境创建模型的一般方法: 2) 理解 EA 界面布局和元素操作的一般技巧: 3) 熟悉 UML 中的各种图的建立和 ...