Проблема в том, что когда для свойства Visibility BoundField
установлено значение false, столбец не отображается клиенту. Обходной путь - использовать HiddenField
внутри TemplateField
.
<asp:TemplateField>
<ItemTemplate>
<asp:HiddenField ID="HiddenField1" runat="server"
Value='<%# Eval("BirthDate") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:HiddenField ID="HiddenField1" runat="server"
Value='<%# Eval("BirthDate") %>' />
</EditItemTemplate>
</asp:TemplateField>
protected void GridView_RowEditing(object sender, GridViewEditEventArgs e)
{
GridViewRow row = GridView.Rows[e.NewEditIndex];
HiddenField hidden = (HiddenField)row.Cells[0].FindControl("HiddenField1");
DateTime birthDate = Convert.ToDateTime(hidden.Value);
}
EDIT
Приведенный выше метод по-прежнему отображает столбец в таблице, поэтому в итоге получается пустой столбец. Это работает, но не лучшее решение, вот способ скрыть поле BirthDate, но все же получить его значение в обработчике RowEditing
. Просто имейте в виду, что Дата рождения все еще отображается клиенту, но не отображается.
<style type="text/css">
.hide
{
display:none;
}
</style>
<asp:BoundField DataField="BirthDate">
<ItemStyle CssClass="hide"/>
</asp:BoundField>
protected void GridView_RowEditing(object sender, GridViewEditEventArgs e)
{
GridViewRow row = GridView1.Rows[e.NewEditIndex];
DateTime birthDate = Convert.ToDateTime(row.Cells[1].Text);
}