C# 在用户控件中使用ListBox元素

C# 在用户控件中使用ListBox元素,c#,asp.net,user-controls,C#,Asp.net,User Controls,我有一个用户控件(ucMarket),它包含(为了简单起见)两个控件:一个ListBox(ucListBox)和一个Label(ucLabel)。我需要在页面上动态创建该用户控件的多个实例(取决于数据集的结果),并使用foreach语句和以下命令添加它们: Panel1.Controls.Add(ucMarket1); 但是如何访问列表框属性(如行)?到目前为止,我唯一发现的是将控件强制转换为列表框: ListBox listBox1 = (ListBox)ucMarket1.FindCont

我有一个用户控件(ucMarket),它包含(为了简单起见)两个控件:一个ListBox(ucListBox)和一个Label(ucLabel)。我需要在页面上动态创建该用户控件的多个实例(取决于数据集的结果),并使用foreach语句和以下命令添加它们:

Panel1.Controls.Add(ucMarket1);
但是如何访问列表框属性(如行)?到目前为止,我唯一发现的是将控件强制转换为列表框:

ListBox listBox1 = (ListBox)ucMarket1.FindControl("ucListBox");
listBox1.Rows = 10;
对于标签部分,我想我也可以做类似的事情:

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

但是,我如何将这些信息放回用户控件中呢?有没有一种方法可以直接使用用户控件而不是强制转换?

好的,有两种方法。从命名约定的角度来看,不要调用label&listbox之类的东西。这是非常令人困惑的,从您的示例中不清楚您是指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);
}
这样,您可以通过以下方式访问列表框

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

您可以设置公共属性以公开所需内容。
var ctrl = Panel1.FindControl("ucMarket1") as ucMarket;
ctrl.TheListBox.Rows ;