我正在使用带有EditItemTemplate的FormView控件(myFormView),其中包含许多子控件。当我使用标准的ASP.Net DropDownList控件(myDropList)时,我可以使用下面的代码获取对myDropList的引用:
((DropDownList)myFormView.FindControl("myDropList"))
我可以完全访问myDropList的属性并获取当前选择的值。这很棒。
但是,我现在需要在FormView控件中使用第三方子控件(此处为http://www.freetextbox.com中的FreeTextBox)。我调用了FreeTextBox控件myFTB,我使用了与上面类似的声明:
((FreeTextBox)myFormView.FindControl("myFTB"))
但是,这会返回null,因此我可以为此检索属性值。
有谁知道它为什么返回null?是否有其他方法来检索对控件的引用?
TIA
答案 0 :(得分:0)
您需要使用递归来查找控件层次结构中的控件。
尝试使用以下方法:
FreeTextBox textBox = (FreeTextBox)FindControl(myFormView, "myFTB");
...
private Control FindControl(Control parent, string id)
{
foreach (Control child in parent.Controls)
{
string childId = string.Empty;
if (child.ID != null)
{
childId = child.ID;
}
if (childId.ToLower() == id.ToLower())
{
return child;
}
else
{
if (child.HasControls())
{
Control response = FindControl(child, id);
if (response != null)
return response;
}
}
}
return null;
}
答案 1 :(得分:0)
您可以这样做以在表单视图中找到控件....
注意:下面的代码找到表单视图控件中的所有文本框
protected void FormView1_DataBound(object sender, EventArgs e)
{
if (FormView1.CurrentMode == FormViewMode.Edit)
{
FindAllTextBoxes(FormView1);
}
}
private void FindAllTextBoxes(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c.GetType().ToString() == "System.Web.UI.WebControls.TextBox")
{
TextBox tbox = c as TextBox;
if (tbox != null)
{
// textbox found ....you could send this textbox, by reference to another procedure that assigns the values comparing
//it by tbox.ID
}
}
if (c.Controls.Count > 0)
{
FindAllTextBoxes(c);
}
}
}
我希望它会帮助你......