有个需求,笔者比较挠头,要求如果前台有数据项的话 这一行就显示,没有的话,就隐藏。
如果要是一个一个判断,并通过Panel的Visible属性设置的话,就得写25次,难道没有别的办法了吗?当然有,就用反射机制就可以。
Code
protected void Page_PreRender(object sender, EventArgs e)
{
PropertyInfo[] pi = this.Page.GetType().GetProperties();
foreach (PropertyInfo prop in pi)
{
if (prop != null && prop.PropertyType == typeof(string))
{
string val = (string)prop.GetValue(this, null);
if (string.IsNullOrEmpty(val))
{
string pnName = "pn_" + prop.Name;
if (Page.FindControl(pnName) != null)
{
Page.FindControl(pnName).Visible = false;
}
}
}
}
}
需要注意的是:
第一,应当放在PreRender事件中;
第二,必须有一个判断,就是必须属性器是字符串类型;
第三,Panel的ID命名有一个约定,就是“pn_”开头,后面跟属性器的名字。