为了进一步解决前两篇文章留下的代码精简的问题,此篇再封装一个小小的循环绑定的方法来实现。
先来看一个简单且常用的效果吧:.
对于一个这样的布局,想必都不陌生,对于下面的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);
}
}
}
}
代码就是这么简单,也没有什么可注释的了,需要递归就递归,不需要就多调用几次,根据需要自行扩展其他控件即可。