valor net mvc how hiddenfor asp asignar asp.net gridview

asp.net - net - html hiddenfor razor



Obtener valor de campo oculto (6)

Tengo un GridView definido de la siguiente manera:

<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>

Cuando un usuario hace clic en el botón Editar, necesito obtener el valor de la columna BirthDate de BirthDate . Para intentar esto, he intentado lo siguiente:

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

Sé que tiene algo que ver con el hecho de que la columna no es visible. La columna debe estar oculta. Pero necesito obtener ese valor, ¿cómo puedo hacer esto?



El problema es que cuando la propiedad Visibilidad de BoundField se establece en falsa, la columna no se representa en el cliente. Un trabajo HiddenField sería usar un HiddenField dentro de un TemplateField lugar.

<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); }

EDITAR

El método anterior aún representa la columna en la tabla, por lo que termina con una columna vacía. Funciona, pero no es la mejor solución, aquí hay una manera de ocultar el campo BirthDate pero aún así obtener su valor en el controlador de evento RowEditing . Solo tenga en cuenta que BirthDate todavía se procesa para el cliente, simplemente no se muestra.

<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); }


He hecho algo como esto (adaptándome a tu ejemplo):

string[] keyList = new string[1]; keyList[0] = "BirthDate"; myGridView.DataKeyNames = keyList;

Luego vinculé el GridView con una DataTable que tiene una columna llamada "BirthDate". Los datos en esta columna se almacenarán bajo DataKeyName especificado anteriormente.

Para obtener el valor deseado, haría algo como esto:

protected void myGridView_RowEditing(object sender, GridViewEditEventArgs e) { DataKeyArray keyList = myGridView.DataKeys as DataKeyArray; if (keyList != null) DateTime birthDate = keyList[e.NewEditIndex]; }

Sin embargo, me doy cuenta de que esto no involucra campos ocultos.


Para ocultar el contenido y el encabezado en la cuadrícula, use el siguiente código: y acceda a la columna como de costumbre. GridView.SelectedRow.Cells[index].Text;

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

<asp:BoundField DataField="MailRoomID" HeaderText="Mailroom ID" ItemStyle-HorizontalAlign="Center" ShowHeader="false" ><ItemStyle CssClass="hide" /><HeaderStyle CssClass="hide"/></asp:BoundField>


Usaría la sugerencia de campo oculto que Phaedrus sugirió, y luego en tu código; usa algo como esto:

GridViewRow row = gvUsers.Rows[e.NewEditIndex]; var hfBirthDate = (HiddenField)row.FindControl("hfBirthDate"); DateTime birthDate = DateTime.Parse(hfBirthDate.Value);


esta es una forma de obtener datos de datos subyacentes

protected void myGridView_RowEditing(object sender, GridViewEditEventArgs e) { GridViewRow row = gvUsers.Rows[e.NewEditIndex]; DateTime birthDate = Convert.ToDateTime(DataBinder.Eval(row.DataItem, "BirthDate")); }