Дополнительно
Получение значения из ячейки грид-вью по событию RowDataBound
string percentage = e.Row.Cells[7].Text;
Я пытаюсь сделать некоторые динамические вещи с моим GridView, поэтому я подключил некоторый код к событию RowDataBound. Я пытаюсь получить значение из определенной ячейки, которая является полем TemplateField. Но приведенный выше код всегда возвращает пустую строку.
Есть какие-нибудь идеи?
Чтобы прояснить ситуацию, вот немного ячейки, в которой происходит нарушение:
<asp:TemplateField HeaderText="# Percentage click throughs">
<ItemTemplate>
<%# AddPercentClickThroughs((int)Eval("EmailSummary.pLinksClicked"), (int)Eval("NumberOfSends")) %>
</ItemTemplate>
</asp:TemplateField>
В связи с этим, кто-нибудь знает, есть ли лучший способ выбора ячейки в строке. Вводить cell[1]
- это отстой. Не могу ли я сделать cell["mycellname"]
, чтобы, если я решу изменить порядок ячеек, ошибки не появлялись?
31
11
почему бы не извлекать данные непосредственно из источника данных.
Когда вы используете поле TemplateField и привязываете к нему литеральный текст, как вы это делаете, asp.net фактически вставляет элемент управления за вас! Он помещается в DataBoundLiteralControl. Это можно увидеть, если посмотреть в отладчике на строку кода, в которой появляется пустой текст.
Таким образом, чтобы получить доступ к информации без изменения шаблона для использования элемента управления, можно сделать следующее:
В результате вы получите текст!
Выше несколько хороших предложений, но вы можете сделать на текстовое значение ячейки в виде сетки, не оборачивая это в буквальном или элемент управления Label. Вы просто должны знать, какое событие на прослушку. В этом случае, использовать это событие связано, а не, например, так:
При запуске отладчика, вы увидите текст в этот метод.
Сначала необходимо обернуть код в элемент управления
Label
илиLiteral
, чтобы можно было правильно ссылаться на него. Происходит то, что система никак не может отследить это, поскольку нет элемента управления, связанного с текстом. Ответственность за добавление своего содержимого в состояние просмотра лежит на элементе управления.Чтобы найти элемент управления в строке, необходимо использовать gridView.FindControl("controlName"). Отсюда можно получить доступ к его свойствам, включая
Text
.Также можно получить свойство DataItem рассматриваемой строки, привести его к соответствующему типу и извлечь информацию напрямую.
Просто использовать цикл, чтобы проверить вашу ячейку например GridView в:
используйте
RowDataBound
функция для связывания данных с определенным ячейки, и получить контроль использования (АСП имени Управления dropdownlist для)управления GridView.FindControl("имя борьбы с")
У меня был аналогичный вопрос, но нашел решение через несколько иной подход. Вместо того, чтобы искать элемент управления, как Крис предложил, я впервые изменил поле был указан в .aspx-страницы. Вместо того, чтобы использовать
<АСП:шаблон ...> по тегу
, я изменил поле в вопрос для использования в<как ASP:BoundField ...>
. Потом, когда я попал на событие RowDataBound, данные могут быть доступны в клетки напрямую.Соответствующие фрагменты: во-первых, aspx-страницы:
Затем в событии RowDataBound я могу получить доступ к значениям напрямую:
Если кто-то может прокомментировать почему это работает, я'd и ценю это. Я не'т понять, почему без BoundField значение не в клетке после связывания, но вы должны искать его через контроль.
Если вы установите атрибут видимых на ASP:BoundField к ложь. Такой
Вы не сделать любого текста в ячейках[я].Текстовое свойство, когда вы цикл по строкам. Так
Но вы можете установить столбец не виден при подключении сетки к событию OnRowDataBound то из вот этого