Cómo recuperar el valor de una columna en GridView
Frecuentes
Visto 417 veces
0
Tengo una tabla con las siguientes columnas:
FileID | username | filename
Estoy usando una vista de cuadrícula que tiene dos columnas:
Nombre de archivo | Descargar
En la columna de descarga, tengo un botón llamado Descargar que se usará para descargar archivos. Ahora quiero recuperar el ID de archivo o el nombre de archivo cuando hago clic en el botón Descargar.
Intenté esta línea para obtener el ID de archivo pero estaba dando un error:
int FileID = (int)GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;
Error: System.ArgumentOutOfRangeException no fue manejado por el código de usuario Message=Index estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección.
Aquí está mi código de página aspx:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="filelist"
Width="404px" onrowcommand="GridView1_RowCommand" Height="131px">
<Columns>
<asp:BoundField DataField="fileid" HeaderText="fileid" InsertVisible="False"
ReadOnly="True" SortExpression="fileid" Visible="False" />
<asp:BoundField DataField="userid" HeaderText="userid" SortExpression="userid"
Visible="False" />
<asp:BoundField DataField="filename" HeaderText="FileName"
SortExpression="filename" />
<asp:ButtonField HeaderText="Download" Text="Download" CommandName="download"/>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="filelist" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [FileDetails] WHERE ([userid] = @userid)">
<SelectParameters>
<asp:SessionParameter Name="userid" SessionField="userid" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
Hay otra manera de hacer esto?
2 Respuestas
1
Podrías usar tu primera BoundField
para obtener el fileid
:
GridViewRow row = (GridViewRow)((Control)sender).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);
Editar: Cuando estás manejando el GridView RowCommand
evento, el código anterior no funciona ya que el sender
es GridView en lugar de Button. Luego encontrará su Botón en el GridViewCommandEventArgs.CommandSource
:
GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;
int FileID = int.Parse(row.Cells[0].Text);
contestado el 03 de mayo de 12 a las 16:05
0
Así es como accedería al valor en una columna dentro de una cuadrícula de datos
GridView1.Rows[rowId].Cells[columnId].Value
contestado el 03 de mayo de 12 a las 15:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# asp.net gridview or haz tu propia pregunta.
La primera línea da la siguiente excepción: no se puede convertir el objeto de tipo 'System.Web.UI.WebControls.GridView' para escribir 'System.Web.UI.WebControls.GridViewRow'. - v3z3t4