Как получить доступ к выбранному элементу в списке данных после обратной передачи? - PullRequest
1 голос
/ 31 октября 2009

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

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

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

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

Ответы [ 4 ]

1 голос
/ 31 октября 2009

Свойство DataItem не является нулевым, если к нему обращаются через событие 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 голосов
/ 04 ноября 2009

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

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

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

0 голосов
/ 31 октября 2009

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

0 голосов
/ 31 октября 2009

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

...