处理用户控件中的ListBox元素

本文关键字:ListBox 元素 用户 控件 处理 | 更新日期: 2023-09-27 18:14:46

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

Panel1.Controls.Add(ucMarket1);

但是我如何获得访问ListBox属性,如行?到目前为止,我发现的唯一一件事就是将控件转换为ListBox:

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

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

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

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

处理用户控件中的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 ;