2011-10-19 144 views
0

我使用的是它包含了一些子控件的EditItemTemplate中FormView控件(myFormView)。當我使用一個標準的ASP.Net DropDownList控件(myDropList),我可以得到一個參考使用下面的行來myDropList:ASP.Net訪問子控件FormView控件

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

我可以充分訪問myDropList的屬性,並獲得當前所選的值。這很棒。

不過,我現在需要使用第三方子控件(FreeTextBox這裏http://www.freetextbox.com找到)在FormView控件。我叫FreeTextBox控制myFTB,我使用與上述類似的聲明:

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

然而,這將返回null,因此我能夠爲這個檢索屬性值。

有誰知道它爲什麼返回null?有沒有其他方法來檢索控件的引用?

TIA

回答

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

我希望它會幫助你..