ASP.Net在FormView控件中访问子控件

时间:2011-10-19 16:01:53

标签: c# asp.net formview freetextbox

我正在使用带有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

2 个答案:

答案 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);
            }
        }
  }

我希望它会帮助你......