winform 数据(双向)绑定 快速更新实体
写点东西感觉特别累,也已经很久没写了。
最近在做一个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 数据(双向)绑定 快速更新实体的更多相关文章
- 我的angularjs源码学习之旅3——脏检测与数据双向绑定
前言 为了后面描述方便,我们将保存模块的对象modules叫做模块缓存.我们跟踪的例子如下 <div ng-app="myApp" ng-controller='myCtrl ...
- Angular数据双向绑定
Angular数据双向绑定 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.Angul ...
- vuejs数据双向绑定原理(get & set)
前端的数据双向绑定指的是view(视图)和model(数据)两者之间的关系:view层是页面上展示给用户看的信息,model层一般是指通过http请求从后台返回的数据.view到model的绑定都是通 ...
- 如何在原生微信小程序中实现数据双向绑定
官网:https://qiu8310.github.io/minapp/ 作者:Mora 在原生小程序开发中,数据流是单向的,无法双向绑定,但是要实现双向绑定的功能还是蛮简单的! 下文要讲的是小程序框 ...
- 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分
最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...
- Vue数据双向绑定原理及简单实现
嘿,Goodgirl and GoodBoy,点进来了就看完点个赞再go. Vue这个框架就不简单介绍了,它最大的特性就是数据的双向绑定以及虚拟dom.核心就是用数据来驱动视图层的改变.先看一段代码. ...
- 深入理解Proxy 及 使用Proxy实现vue数据双向绑定
阅读目录 1.什么是Proxy?它的作用是? 2.get(target, propKey, receiver) 3.set(target, propKey, value, receiver) 4.ha ...
- 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定
前言: 学习前端也有半年多了,个人的学习欲望还比较强烈,很喜欢那种新知识在自己的演练下一点点实现的过程.最近一直在学vue框架,像网上大佬说的,入门容易深究难.不管是跟着开发文档学还是视频教程,按步骤 ...
- vue数据双向绑定原理
vue的数据双向绑定的小例子: .html <!DOCTYPE html> <html> <head> <meta charset=utf-> < ...
随机推荐
- XML--XML作用
XML 把数据从 HTML 分离 如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML. 通过 XML,数据能够存储在独立的 XML 文件中.这样你就可以专注 ...
- STL 训练 POJ - 1862 Stripies
Description Our chemical biologists have invented a new very useful form of life called stripies (in ...
- P6474 [NOI Online #2 入门组] 荆轲刺秦王
P6474 [NOI Online #2 入门组] 荆轲刺秦王 bfs+差分+卡常 本来我其实是场内选手,但是因为记错提交时间,晚了半小时才交,交不上了,就自动降级为了场外选手 题面复杂,不简述了 首 ...
- 动态SQL各个标签作用以及注意事项详解
创建com.mybatis包,包含:UserMapper.xml和mybatis-config.xml UserMapper.xml代码: <?xml version="1.0&quo ...
- 《C程序设计语言》 练习1-22
问题描述 练习1-22 编写一个程序,把较长的输入行“折”成短一些的两行或者多行,折行的位置在输入行的第N列之前的最后一个非空格之后.要保持程序能够智能地处理输入行很长以及在制定的列前没有空格或者制表 ...
- 题目分享Q
题意:给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 分析:这可以说是换根法的裸题吧 首先考虑对一个给定的根如何计算,这应该是最简单的那种树形dp吧甚至可能都不算dp(好像 ...
- Java笔记(day18-19)
泛型: jdk1.5出现的安全机制. 好处: 1,将运行时期的问题ClassCastException转到了编译时期. 2,避免了强制转换的麻烦. <>:当操作的引用数据类型不确定的时候. ...
- A. Powered Addition(二进制性质-思维)
\(拿样例来看1 7 6 5\) \(6成长到7是最合理的,因为1s就可以实现而且对于后面来说最优\) \(5成长到7是最合理的,因为2s就可以实现而且对于后面最优\) \(发现了什么?二进制是可以组 ...
- Fortify Audit Workbench 笔记 File Disclosure: Spring 文件泄露(Spring框架)
File Disclosure: Spring 文件泄露(Spring框架) Abstract 若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件 ...
- CF#358 D. Alyona and Strings DP
D. Alyona and Strings 题意 给出两个字符串s,t,让找出最长的k个在s,t不相交的公共子串. 思路 看了好几个题解才搞懂. 代码中有注释 代码 #include<bits/ ...