0

我有一个用户控件(ucMarket),它包含(为了简单起见)两个控件:一个列表框(ucListBox)和一个标签(ucLabel)。我需要在页面上动态创建该用户控件的多个实例(取决于 DataSet 的结果),然后使用 foreach 语句和以下语句添加它们:

Panel1.Controls.Add(ucMarket1);

但是我如何访问像 Rows 这样的 ListBox 属性?到目前为止,我唯一发现的是将控件转换为 ListBox:

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

对于标签部分,我想我也可以做类似的事情:

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

但是,如何将这些信息放回用户控件中?有没有办法直接使用用户控件而不是强制转换?

4

1 回答 1

2

好的,有几件事。从命名约定的角度来看,不要将标签和列表框称为 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);
}

因此,最好的办法是将 Control 上的 Listbox 公开为公共属性。

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

这样您就可以通过以下方式访问您的列表框。

var ctrl = Panel1.FindControl("ucMarket1") as ucMarket;
ctrl.TheListBox.Rows ;
于 2013-05-22T15:47:02.353 回答