//最近有个以前人写的winform项目要维护,要增加很多窗体控件,以下记录使用反射赋值的方法:
窗体:
控件名称要与定义的类名称一致;
类:
方法封装
//设置控件text
public void setFormValue(Control controls,object moldClass)
{
if (moldClass != null&& controls !=null)
{
var content = moldClass.GetType().GetProperties();
int count = content.Count();
for (int i = 0; i < count; i++)
{
var controlsFind = controls.Controls.Find(content[i].Name, true);
if (controlsFind != null)
{
foreach (var item in controlsFind)
{
try
{
var value = content[i].GetValue(moldClass,null);
if (value != null)
{
item.Text = value.ToString();
}
}
catch (Exception)
{
}
}
}
}
}
}
//获取控件text
public void getFormValue(Control controls,object moldClass)
{
var content = moldClass.GetType().GetProperties();
int count = content.Count();
for (int i = 0; i < count; i++)
{
var controlsFind = controls.Controls.Find(content[i].Name, true);
if (controlsFind != null)
{
foreach (var item in controlsFind)
{
try
{
var value = item.Text;
if (value != null)
{
if (item is DateTimePicker) //特殊控件需要转化类型
{
content[i].SetValue(moldClass,Convert.ToDateTime(value), null);
}
else
{
content[i].SetValue(moldClass, value, null);
}
}
}
catch (Exception)
{
}
}
}
}
}
//获取DataTable赋值对象类
public void getDataTableValue(DataTable dt,object moldClass)
{
var content = moldClass.GetType().GetProperties();
//int count = content.Count();
foreach (var item in content)
{
item.SetValue(moldClass, dt.Rows[0][item.Name], null);//单行取值
}
}
//测试调用:
private void simpleButton2_Click(object sender, EventArgs e)
{
Entity.material10 sw = new Entity.material10();
sw.material = "102366663V";
sw.VATNo = "YES";
sw.replaceProject = "";
sw.registerDate = DateTime.Now;
sw.No = 200;
setFormValue(tabControl1.TabPages[0],sw);
}
//效果(控件名称必须和对象属性名称一致):
对象赋值: