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

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

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

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

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


person Prabhu    schedule 30.10.2009    source источник
comment
Вы должны переназначить управление. ViewState не будет сохранять ваши элементы с привязкой к данным.   -  person    schedule 31.10.2009


Ответы (4)


Свойство 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);
}
person Phaedrus    schedule 31.10.2009

Несколько предложений здесь.

person keyboardP    schedule 31.10.2009

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

person Mike    schedule 31.10.2009

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

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

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

person Ravinder Singh    schedule 03.11.2009