是否可以动态(并且一般地)清除用户控件的所有子控件的状态? (例如,所有的 TextBox、DropDrownList、RadioButton、DataGrid、Repeater 等——基本上任何具有 ViewState 的东西)
我试图避免做这样的事情:
foreach (Control c in myUserControl.Controls)
{
if (c is TextBox)
{
TextBox tb = (TextBox)c;
tb.Text = "";
}
else if (c is DropDownList)
{
DropDownList ddl = (DropDownList)c;
ddl.SelectedIndex = -1;
}
else if (c is DataGrid)
{
DataGrid dg = (DataGrid)c;
dg.Controls.Clear();
}
// etc.
}
我正在寻找这样的东西:
foreach (Control c in myUserControl.Controls)
c.Clear();
...但显然这不存在。有没有什么简单的方法可以动态/通用地完成此任务?
我打算建议一个类似于 Task 的解决方案,除了(正如 Sixlettervariables 指出的那样)我们需要将其实现为 1 个扩展方法,并本质上打开传入的控件的精确类型(即复制您在问题中发布的逻辑) 。
public static class ControlExtensions
{
public static void Clear( this Control c )
{
if(c == null) {
throw new ArgumentNullException("c");
}
if (c is TextBox)
{
TextBox tb = (TextBox)c;
tb.Text = "";
}
else if (c is DropDownList)
{
DropDownList ddl = (DropDownList)c;
ddl.SelectedIndex = -1;
}
else if (c is DataGrid)
{
DataGrid dg = (DataGrid)c;
dg.Controls.Clear();
}
// etc....
}
}
这不是特别优雅的方法,但页面/控件中的代码现在更加简洁
foreach (Control c in myUserControl.Controls) {
c.Clear();
}
当然你现在可以打电话control.Clear()
代码中的其他任何地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)