2012-02-27 52 views
1

我正在使用中繼器創建動態的數據庫驅動表單。在中繼器的其他行中查找動態控件

所需功能的一部分是能夠具有動態驅動的下拉列表,這些下拉列表取決於先前選擇的下拉列表中的值以生成其值。

所以,如果我創建一個下拉列表控件,並將其添加到一行併爲其分配一個id,並且我轉到下一行,如何從上一行中的控件獲取值?

這就是我想要的,但.FindControl每次都返回null。

DropDownList toParentDDL = (DropDownList)rptDynamicForm.FindControl("ParentControlID"); 

ID的設置正確,並且放置在查找控制方法中的ID也是適當的。

只是另一個想法...當我添加控件到中繼器,我這樣做是這樣的:

e.Item.FindControl("pnlQuestionAnswer").Controls.Add(toDropDown); 

那也許是因爲它被嵌套在面板內?

清除任何混淆。這些控件正在ItemDataBound上創建。

解決方案:

感謝蒂姆的幫助。我終於意識到問題所在。我正在尋找中繼器內的控制器,而中繼器本身不包含控制器,ITEMS包含我正在尋找的控制器,並且即使這些項目位於中繼器中,它也不會顯示在這些項目中。

要解決此問題,我只是做了(我在我的頭.findcontorl作品像.find jQuery中,它不會有它):

    foreach (RepeaterItem toItem in rptDynamicForm.Items) 
        { 
         DropDownList toParentDDL = (DropDownList)toItem.FindControl("ParentControlID"); 

         } 

所以現在只要它不回null,它將包含正確的控件。

+0

你能確保你的FindControl(「」)控制的名稱拼寫正確,C#的情況下重要的.. – MethodMan 2012-02-27 15:28:11

+0

分配給id,並在查找控制中使用的值從數據庫中拉出...我在運行時驗證了這些值是相同的。 – Patrick 2012-02-27 15:30:30

+0

您必須檢查您的查看源並識別ID – 2012-02-27 15:32:15

回答

3

您無法搜索中繼器以在其某個ItemTemplates中找到控件。他們的NamingContainer是他們的RepeaterItems而不是Repeater本身。這是有道理的,因爲每個項目都包含與上一個/下一個項目具有相同ID的控件。

因此,你需要去上一個項目的引用找到你的控制:

protected void rptDynamicForm_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) 
{ 
    switch (e.Item.ItemType) { 
     case ListItemType.Item: 
     case ListItemType.AlternatingItem: 
      if (e.Item.ItemIndex != 0) { 
      DropDownList toParentDDL = 
       (DropDownList)rptDynamicForm.Items[e.Item.ItemIndex - 1].FindControl("ParentControlID"); 
      } 
      break; 
    } 
} 
+0

謝謝,我現在得到它...不幸的是,只是前一行將無法正常工作,因爲對於這種特殊的形式,我將有4行將從單個字段派生出它們的父值。不管...這是正確的答案。 – Patrick 2012-02-27 15:59:05

相關問題