2009-10-30 2 views
1

Как получить доступ к элементу данных после обратной передачи?Как получить доступ к выбранному элементу данных в каталоге данных после обратной передачи?

У меня есть DataList, а когда пользователь выбирает элемент, в OnItemCommand пожаров событий, и мой обработчик событий выглядит Лик это:

protected void dlResults_Select(object sender, DataListCommandEventArgs e) 
{ 
    MyItem item = e.Item.DataItem as MyItem; 
} 

элемент всегда нуль. Есть ли способ получить доступ к элементу базы данных?

+0

Необходимо переустановить элемент управления. ViewState не будет сохранять ваши привязанные к данным элементы. – 2009-10-31 04:14:29

ответ

0

Простейший подход, который я нашел для этого типа проблемы, заключается в добавлении события javascript в элемент управления, который обновляет элемент управления ввода (тип = скрытый) с выбранным значением элемента управления. Если вы добавите атрибут runat = server к тегу, вы можете получить доступ к серверу ввода управления и прочитать его значение. Postback должен срабатывать после события javascript, чтобы все остальное работало «нормально» для вас.

1

Свойство DataItem не имеет значения null при доступе через событие ItemDataBound. Если вам требуется идентификатор для изменения вашего объекта/записи, вы можете установить свойство DataKeyField DataList для заполнения коллекции DataKeys.

<asp:DataList ID="DataList1" runat="server" DataKeyField="id"> 
</asp:DataList> 

Вы можете использовать идентификатор в вашем OnItemCommand случае для создания экземпляра нужного объекта, или в качестве параметра запроса к базе данных.

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) 
{ 
    int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]); 
    MyItem item = new MyItem(id); 
} 
0

Соответствующий ответ на ваш вопрос может быть предоставлен только после того, как вы знаете, как вы выполняете привязку данных. Выполняете ли вы привязку данных к коду, вызывая метод .DataBind() для datalist или предоставляете источник данных для связанного с ним источника данных. Причина, по которой я задаю этот вопрос, заключается в том, что если вы используете метод dataBind() для datalist из кода для привязки к каталогу данных, вам нужно будет вызвать его при каждом обратном обращении, чтобы убедиться, что datalist снова получает привязку данных. В противном случае после сообщения назад вы увидите, что datalist отображается пустым. В случае, если вы предоставляете источник данных для datalist для привязки, используя его свойство DataSource или DataSourceId, привязка данных к каталогу данных на каждом столбце позаботится об этом, вам не нужно беспокоиться об этом.

Но из-за внешнего вида вещей я считаю, что вы получаете значение как null, потому что пытаетесь получить значение DataItem в неправильном месте. Помните, что вам нужно будет следовать правильному жизненному циклу элемента управления, чтобы он работал для вас так, как вы хотите, чтобы он работал.

Я могу предоставить лучший ответ, если вы можете ответить на мои вопросы выше. Ваше текущее заявление кажется недостаточным для предоставления соответствующего ответа.

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