C# 控件自动绑定赋值

为了进一步解决前两篇文章留下的代码精简的问题,此篇再封装一个小小的循环绑定的方法来实现。

先来看一个简单且常用的效果吧:.

C# 控件自动绑定赋值

对于一个这样的布局,想必都不陌生,对于下面的GridView还好,只要绑定好列名设置下数据源就可以正常显示了,但是对于上面那零零散散的Lable控件和TextBox控件呢?比如第一行,每一项信息你是否是用两个Lable去布局呢?然后在Load事件中对各个控件进行赋值或者属性绑定?

所以这里的方案是这样的:

首先从布局方面稍微精简下,每项信息用一个Lable即可,然后对数据进行字符串拼接

然后就是赋值问题,如果说想要做的更完美些,还是建议去用自定义控件对数据源属性进行操作,为了方便使用,这里直接使用了控件的Tag属性来代替FiledName。即给每个控件的Tag赋值对象的字段。

最后用一个循环来将对象的值赋值到控件上。

实现功能:

  • 对页面控件自动绑定赋值

开发环境:

  • 开发工具:Visual Studio 2013
  • .NET Framework版本:4.5

实现代码:

 private void Form1_Load(object sender, EventArgs e)        {            SetValue(this, model);        }
        private void SetValue(Control parent, object dataSource)        {            if (dataSource == null)            {                return;            }            foreach (Control c in parent.Controls)            {                string filedName = Convert.ToString(c.Tag);                if (!string.IsNullOrWhiteSpace(filedName))                {                    if (c is Label)                    {                        c.Text += dataSource.GetType().GetProperty(filedName).GetValue(dataSource);                    }                    if (c is TextBox)                    {                        c.DataBindings.Add("Text", dataSource, filedName, false, DataSourceUpdateMode.OnPropertyChanged);                    }                }            }        }

代码就是这么简单,也没有什么可注释的了,需要递归就递归,不需要就多调用几次,根据需要自行扩展其他控件即可。