打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 数据校验与控件绑定

    在上一篇中,写了使用特性对一个对象的值进行校验;虽然代码比较简单,但依然不是最优解,在做数据新增校验的时候,倒也没什么问题,毕竟这是WinForm;但是如果是做数据编辑,代码就会变得更冗余,特别是在控件比较多的情况下。

所以这一篇其实是引用了控件的DataBindings属性来做优化。

实现功能:

    • 使用控件的DataBindings属性简化数据验证

开发环境:

开发工具:Visual Studio 2013

.NET Framework版本:4.5

如果按照上一篇的思路来写编辑页面的话,可能会是下面这个样子:

public Model model = new Model{Name = "张三",Age = 10,mail = "111"};public Form2()        {            InitializeComponent();        }private void Form2_Load(object sender, EventArgs e)        {            txt_name.Text = model.Name;            txt_age.Text = model.Age+"";            txt_mail.Text = model.mail;        }private void button1_Click(object sender, EventArgs e)  {      Model model = new Model            {                Name = txt_name.Text,                Age = int.Parse(txt_age.Text),                mail = txt_mail.Text                };      string msg = model.Validate();      if (!string.IsNullOrWhiteSpace(msg))            {                MessageBox.Show(msg);            }      else            {                MessageBox.Show("验证通过");            }  }

发现什么问题了吗?对控件进行了来回的赋值以及取值,在当有数十个控件的时候,代码可能就已经惨不忍睹了。

所以,这里我们就使用控件的DataBindings属性来优化一下这个情况。

本着能少写一行代码就少写一行的思想,此处还是要实现一个扩展方法,主要是把DataBindings进行一下简单的封装,能在调用的时候少写几个字母。。。

 public static class ControlEx    {        public static void BindText(this Control control, object dataSource, string dataMember)        {            control.DataBindings.Add("Text", dataSource, dataMember, false, DataSourceUpdateMode.OnPropertyChanged);        }    }

然后再来看看页面的实现

public Model model = new Model{Name = "张三",Age = 10,mail = "111"};public Form2()        {            InitializeComponent();        }private void Form2_Load(object sender, EventArgs e)        {            txt_name.BindText(model, "Name");            txt_age.BindText(model, "Age");            txt_mail.BindText(model, "Mail");        }
private void button1_Click(object sender, EventArgs e) { string msg = model.Validate(); if (!string.IsNullOrWhiteSpace(msg)) { MessageBox.Show(msg); } else { MessageBox.Show("验证通过"); } }

怎么样?是不是简洁清爽了好多?再多的控件,也只需要进行一次绑定即可,数据源的值随着控件值变化而变化。

可能这里又会继续想到下一个问题,能不能让绑定也变得更简单呢?毕竟几十个控件就几十行代码,也是很麻烦。好吧,其实这里的麻烦是比较难省略的,只是我们可以把麻烦转移到其他地方,然后使用循环来实现这个效果。下一篇来写下实现代码。

实现效果:

由简入繁,拿来即用

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VB.NET中多窗体同步的解决方案
V8.A12NumericUpDown 控件(1)
带有消息机制的线程
利用委托自定义事件
ComboBox:组合框控件
VB.NET下遍历TextBox组件的方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服