ASP.Net Доступ к дочерним элементам управления в элементе управления FormView - PullRequest
0 голосов
/ 19 октября 2011

Я использую элемент управления 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, и поэтому я могу получить значения свойств для этого.

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

TIA

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

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

Примечание: приведенный ниже код находит все текстовые поля внутри элемента управления формы

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

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

0 голосов
/ 19 октября 2011

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

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

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