Как получить данные из gridview в ItemTemplate в ASP.NET 2

У меня есть gridview, где каждый столбец имеет два поля шаблона. Один из них — ItemTemplate, а другой — EditItemTemplate. Теперь в EditItemTemplate будут отображаться некоторые текстовые поля, в которых я могу выполнить необходимое редактирование. Я могу легко получить данные из каждой ячейки, используя следующий код:

Dim gvRow As GridViewRow = gvView.Rows(e.RowIndex)

CType(gvRow.FindControl("controlID"), TextBox).Text

Но как я могу получить данные, когда представление сетки не находится в режиме редактирования, который находится в ItemTemplate. Я пробовал следующее:

Dim rowView As DataRowView = CType(gvRow.DataItem, DataRowView)

Dim something As String = rowView("data_field").ToString()

Но его получение ссылки на объект исключения не установлено для экземпляра объекта. Вероятно, это происходит из-за того, что приведенный выше код следует использовать в таком методе, как RowDataBound, при создании экземпляра строки. Но мне нужно получить данные каким-то другим способом. Есть идеи как это сделать.

Еще раз для пояснения, я хочу получить данные, когда столбцы gridview находятся в режиме ItemTemplate.


person Alim Ul Gias    schedule 01.11.2011    source источник


Ответы (3)


Я думаю, вы хотите прочитать значение столбца представления сетки в какой-то команде. Если у вас есть gvRow, который является строкой вашего gridview, вы можете использовать .Cell(index).Text, чтобы получить значение столбца.

Если вы используете поле шаблона и используете некоторые элементы управления для отображения данных столбца, вам нужно выполнить gvRow.findControl("controlId"), а затем привести его к соответствующему объекту управления для чтения данных из него.

Удачного кодирования

person Prashant Lakhlani    schedule 01.11.2011
comment
Нет, я пробовал это. Что бы я ни делал, .Cell(index).Text возвращает . Это пустая строка. - person Alim Ul Gias; 01.11.2011
comment
какое событие вы используете? пожалуйста, разместите код aspx и vb/cs здесь, чтобы мы могли очень помочь - person Prashant Lakhlani; 01.11.2011
comment
Я использую событие onClick. Весь код не может быть дан. Просто посмотрите на следующую строку. Что я делаю неправильно ?? Dim test As String= Me.gvView.Rows(index).Cells(index).Text, хотя есть значение, но в итоге я установил для теста значение - person Alim Ul Gias; 01.11.2011
comment
Хорошо, это имеет смысл, вы используете какой-либо элемент управления для отображения данных столбца? в этом случае вам нужно сделать Me.gvView.Rows(index).FindControl(ControlId), чтобы получить элемент управления, а затем получить от него значение - person Prashant Lakhlani; 01.11.2011
comment
хорошо, я использую элемент управления в editItemTemplate, но в itemTemplate я использую DataBinder. Итак, как я могу получить данные, когда я не в режиме редактирования - person Alim Ul Gias; 01.11.2011
comment
Я думаю, вам нужно добавить ‹asp:hiddenField в свой столбец и найти его по идентификатору, это самый простой способ добиться этого. - person Prashant Lakhlani; 01.11.2011

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

person Paul    schedule 01.11.2011

Два ответа сработали нормально, большое спасибо.

Я потратил больше времени, пытаясь получить значение ячейки GridView, но бесполезно, я не мог знать, в чем проблема. Когда я прочитал ваш ответ, я обнаружил, что в моем GridView есть поля шаблона, поэтому проблема была в этом.

person Mohamed Khalil    schedule 05.01.2012
comment
Это не ответ! это должно быть в комментарии (если требуется) - person Zerotoinfinity; 19.01.2015