2009-10-27 1 views
0

У меня есть usercontrol, который содержит datalist, и я хочу установить источник данных для datalist на разные вещи в зависимости от того, на какой странице пользовательский контроль включен.Установить datalist.datasource изнутри usercontrol - asp.net C#

Так что, я думаю, что мне нужно сделать, это выставить публичное свойство DataList, которое получит источник данных и установить его, например, так:

public datasource UserDataSource 
{ 
get { return DataList1.DataSource; } 
set { DataList1.DataSource = value; } 
} 

но выше, очевидно, не работает. Тогда я бы назвал это так:

MyUserControl.UserDataSource = datasourcename; 

, а затем как-то связать datalist внутри usercontrol.

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

+0

является контроль пользователя будет отображать один и тот же тип данных на различных различных страниц или полностью случайными и разные вещи? –

+0

Я не уверен, в чем проблема. Вы не уверены в том, как автоматически связывать данные? –

+0

Он будет отображать одни и те же данные на каждой странице, только из разных запросов. – somacore

ответ

1

Вы должны использовать найти способ управления, чтобы найти свой DataList первым, а затем назначить источник данных, как ...

DataList dl = (DataList)yourLoadedusercontrol.FindControl("yourDatalist"); 
    dl.DataSource = yourdatasource; 
+0

Это сработало отлично. Спасибо. – somacore

1

Я знаю, что вы уже приняли ответ, но я чувствую, что я должен добавить свои мысли:

Ваша первоначальная идея была верна - вам просто нужно было вызвать метод databind вашего datalist после установки источника данных. Я действительно не чувствую, что выполнение вышеупомянутого метода - лучший способ. Вы действительно должны иметь свойство метода или writeonly (как вы это делаете), которое принимает возможный IList или IEnumerable вашего настраиваемого объекта и связывает его непосредственно с вашим каталогом данных. Ваша страница или элемент управления, содержащий этот элемент управления пользователя, не должны знать о типе управления данными. Если вы измените его с помощью Datalist на Repeater или GridView, вы должны изменить его везде, где вы привязаны к пользовательскому элементу управления.

Пример:

IList<CustomClass> results = new List<CustomClass>(); //you would load your collection from your database 
this.myUserControl.LoadData(results); 

В вашем пользовательском элементе управления:

public void LoadData(IList<CustomClass> data){ 
    this.datalist1.datasource = data; 
    this.datalist1.databind(); 
} 
Смежные вопросы