2013-05-22 15 views
0

我有一個用戶控件(ucMarket),它包含兩個控件(一個ListBox(ucListBox)和一個Label(ucLabel))。我需要創建動態(取決於從數據集的結果)的頁面上的用戶控件的多個實例,我將它們添加使用foreach語句,並執行以下操作:在用戶控件中使用ListBox元素

Panel1.Controls.Add(ucMarket1); 

但是我怎麼可以訪問ListBox屬性如行?我到目前爲止發現的唯一的事情是投控作爲一個列表框:

ListBox listBox1 = (ListBox)ucMarket1.FindControl("ucListBox"); 
listBox1.Rows = 10; 

爲標籤的一部分,我想我也可以做類似的事情:

label1 = (Label)ucMarket1.FindControl("ucLabel"); 

但隨後,該怎麼辦我把這些信息放回用戶控件中?有沒有辦法直接與用戶控件而不是投射?

+1

您可以設置公共屬性以公開您需要的內容。 –

回答

2

好的一些事情。從命名約定的角度來看,不要調用標籤& listbox,ucSOMETHING。這很混亂,從你的例子中不清楚你是指的是asp:Label控件還是你寫的一些自定義的userControl。至於訪問您的控件。

我假設你正在創建並以下列方式加入一些用戶控件。

for(int i = 0; i < 5; i++) 
{ 
    var control = Page.LoadControl("~/Path/To/ucMarket.ascx"); 
    control.Id = "ucMarket" + i; 
    Panel1.Controls.Add(control); 
} 

所以你最好的選擇是公開你的控件上的Listbox作爲公共財產。

public class ucMarket : UserControl 
{ 
    public ListBox TheListBox 
    { 
     get { return ucListBox; } 
    } 
} 

這樣,您可以通過以下方式訪問您的列表框。

var ctrl = Panel1.FindControl("ucMarket1") as ucMarket; 
ctrl.TheListBox.Rows ; 
+0

Thx。奇蹟般有效。 –

相關問題