У меня был похожий вопрос, но я нашел решение с помощью немного другого подхода. Вместо того, чтобы искать элемент управления, как предложил Крис, я сначала изменил способ указания поля на странице .aspx. Вместо того, чтобы использовать тег <asp:TemplateField ...>
, я изменил поле, чтобы использовать <asp:BoundField ...>
. Затем, когда я добрался до события RowDataBound, данные могли быть доступны непосредственно в ячейке.
Соответствующие фрагменты: во-первых, страница aspx:
<asp:GridView ID="gvVarianceReport" runat="server" ... >
...Other fields...
<asp:BoundField DataField="TotalExpected"
HeaderText="Total Expected <br />Filtration Events"
HtmlEncode="False" ItemStyle-HorizontalAlign="Left"
SortExpression="TotalExpected" />
...
</asp:Gridview>
Затем в событии RowDataBound я могу получить доступ к значениям напрямую:
protected void gvVarianceReport_Sorting(object sender, GridViewSortEventArgs e)
{
if (e.Row.Cells[2].Text == "0")
{
e.Row.Cells[2].Text = "N/A";
e.Row.Cells[3].Text = "N/A";
e.Row.Cells[4].Text = "N/A";
}
}
Если бы кто-то мог прокомментировать , почему это работает, я был бы признателен. Я не совсем понимаю, почему без BoundField значение не находится в ячейке после привязки, но вы должны искать его через элемент управления.