获取隐藏的字段值

use*_*662 5 asp.net gridview

我的GridView定义如下:

<asp:GridView ID="myGridView" AutoGenerateColumns="false" runat="server"
OnLoad="myGridView_Load" OnRowCommand="myGridView_Command" OnRowEditing="myGridView_RowEditing" OnRowDeleting="myGridView_RowDeleting" DataKeyNames="ID" > 
  <Columns>
    <asp:BoundField DataField="ID" Visible="false" />
    <asp:BoundField DataField="BirthDate" Visible="false" />
    <asp:BoundField DataField="FirstName" HeaderText="First Name" />
    <asp:BoundField DataField="LastName" HeaderText="Last Name" />
    <asp:TemplateField HeaderText="Other">
      <ItemTemplate>
        <asp:LinkButton ID="editLB" runat="server" Text="edit" CommandName="Edit" />
        <asp:LinkButton ID="deleteLB" runat="server" Text="delete" CommandName="Delete" />
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>   
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

当用户单击编辑按钮时,我需要获取BirthDate列的值.为了尝试这一点,我尝试了以下方法:

protected void myGridView_RowEditing(object sender, GridViewEditEventArgs e)
{
  GridViewRow row = gvUsers.Rows[e.NewEditIndex];
  DateTime birthDate = (DateTime)(row.Cells[1].Text);

  // Does not work
}
Run Code Online (Sandbox Code Playgroud)

我知道它与列不可见这一事实有关.必须隐藏该列.但我需要获得这个价值 - 我该怎么做?

Pha*_*rus 9

问题是当the的Visibility属性BoundField设置为false时,列不会呈现给客户端.解决方法是使用HiddenFielda 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>
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)

编辑

上面的方法仍然会在表中呈现列,因此您最终会得到一个空列.它工作但不是最好的解决方案,这里隐藏BirthDate字段但仍然在RowEditing事件处理程序中获取其值.请记住,BirthDate仍然呈现给客户端,只是没有显示.

<style type="text/css">
    .hide
    {
        display:none;
    }
</style>

<asp:BoundField DataField="BirthDate">
    <ItemStyle CssClass="hide"/>
</asp:BoundField>
Run Code Online (Sandbox Code Playgroud)
protected void GridView_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridViewRow row = GridView1.Rows[e.NewEditIndex];
    DateTime birthDate = Convert.ToDateTime(row.Cells[1].Text);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

要隐藏内容以及网格中的标题,请使用以下代码:并照常访问该列. GridView.SelectedRow.Cells[index].Text;

<style type="text/css">
.hide
{
    display:none;
}
Run Code Online (Sandbox Code Playgroud)

<asp:BoundField DataField="MailRoomID" HeaderText="Mailroom ID" ItemStyle-HorizontalAlign="Center" ShowHeader="false" ><ItemStyle CssClass="hide" /><HeaderStyle CssClass="hide"/></asp:BoundField>
Run Code Online (Sandbox Code Playgroud)