即时尝试编写一个公共函数,可以在我的所有页面调用,以便在插入数据后清除所有文本框.我这样用过它:
public void clean(Control parent)
{
try
{
foreach (Control c in parent)
{
TextBox tb = c as TextBox; //if the control is a textbox
tb.Text = String.Empty; //display nothing
}
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
}
Run Code Online (Sandbox Code Playgroud)
然而,foreach提出了一个错误说法
"无法对变量类型system.web.ui.control进行操作,因为它不包含getenumerator的公共函数.
任何人都可以建议替代?
解
你想迭代子控件parent,所以使用这个:
foreach (Control c in parent.Controls)
{
//Do Stuff
}
Run Code Online (Sandbox Code Playgroud)
建议
我还建议检查控件是否TextBox也是......
TextBox tb = c as TextBox;
if(tb != null)//Will be null if c is not a TextBox
{
tb.Text = String.Empty;
}
Run Code Online (Sandbox Code Playgroud)
要么
if(c is TextBox)//Check if c is TextBox before using it
{
TextBox tb = c as TextBox;
tb.Text = String.Empty;
}
Run Code Online (Sandbox Code Playgroud)
(参见有关良好讨论的评论以及两种方法之间差异的链接)
我使用OfType扩展方法只过滤TextBoxes.你的工作不起作用,因为你不能枚举Control你需要一个IEnumerable典型的(虽然不是必需的).
foreach (TextBox tb in parent.Controls.OfType<TextBox>())
{
tb.Text = String.Empty;
//or
tb.Clear();
}
Run Code Online (Sandbox Code Playgroud)