ASP.Net Доступ к дочерним элементам управления в элементе управления FormView

Я использую элемент управления FormView (myFormView) с EditItemTemplate, который содержит несколько дочерних элементов управления. Когда я использую стандартный элемент управления ASP.Net DropDownList (myDropList), я могу получить ссылку на myDropList, используя следующую строку:

((DropDownList)myFormView.FindControl("myDropList"))

Я могу получить полный доступ к свойствам myDropList и получить значение, выбранное в данный момент. Это замечательно.

Однако теперь мне нужно использовать сторонний дочерний элемент управления (FreeTextBox, который можно найти здесь http://www.freetextbox.com/) в элементе управления FormView. Я вызвал элемент управления FreeTextBox myFTB, и я использую выражение, подобное приведенному выше:

((FreeTextBox)myFormView.FindControl("myFTB"))

Тем не менее, это возвращает нуль, и, следовательно, я могу получить значения свойств для этого.

Кто-нибудь знает, почему возвращается null? Есть ли другой способ получить ссылку на элемент управления?

ТИА

2 ответа

Решение

Вам нужно будет использовать рекурсию, чтобы найти элемент управления в иерархии элементов управления.

Попробуйте использовать следующий метод:

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;
}

Вы можете сделать это, чтобы найти элементы управления в виде формы....

ПРИМЕЧАНИЕ: приведенный ниже код находит все текстовые поля внутри элемента управления представлением формы.

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

Я надеюсь, что это поможет вам..

Другие вопросы по тегам