2013-05-22 3 views
0

У меня есть пользовательский элемент управления (ucMarket), который содержит (для простоты) два элемента управления: ListBox (ucListBox) и Label (ucLabel). Мне нужно создать несколько экземпляров этого пользовательского элемента управления на странице динамически (в зависимости от результатов от DataSet), и добавить их с помощью Еогеаспа заявления и следующее:Работа с элементами ListBox в пользовательском элементе управления

Panel1.Controls.Add(ucMarket1); 

Но как я могу получить доступ к свойства ListBox, такие как строки? Единственное, что я нашел до сих пор является приведение контроля в ListBox:

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

для ярлыка, то я предполагаю, что я также могу сделать что-то подобное:

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

Но тогда, как Я вернул эту информацию в пользовательский элемент управления? Есть ли способ работать непосредственно с пользовательским элементом управления, а не с литьем?

+1

Вы можете установить общедоступные объекты, чтобы открыть, что вам нужно. –

ответ

2

Хорошо, пару вещей. с точки зрения соглашения об именах, не вызывайте метку & listbox, ucSOMETHING. Это очень запутанно и непонятно из вашего примера, ссылаетесь ли вы на элемент asp: Label или какой-то пользовательский пользовательский контроль, который вы написали. Что касается доступа к вашим элементам управления.

Я предполагаю, что вы создаете и добавляете кучу пользовательских элементов управления следующим образом.

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. Работает как шарм. –

Смежные вопросы