ASP.NET GridView RowIndex As CommandArgument

¿Cómo se puede acceder y visualizar el índice de fila de un elemento de vista de cuadrícula como el argumento de comando en un botón de columna de campo de botón?

   ..... 

Aquí hay una manera muy simple:

  

MSDN dice que:

La clase ButtonField completa automáticamente la propiedad CommandArgument con el valor de índice apropiado. Para otros botones de comando, debe establecer manualmente la propiedad CommandArgument del botón de comando. Por ejemplo, puede establecer CommandArgument en <% # Container.DataItemIndex%> cuando el control GridView no tiene habilitada la búsqueda.

Por lo tanto, no debería necesitar configurarlo manualmente. Un comando de fila con GridViewCommandEventArgs lo haría accesible; p.ej

 protected void Whatever_RowCommand( object sender, GridViewCommandEventArgs e ) { int rowIndex = Convert.ToInt32( e.CommandArgument ); ... } 

Aquí está la sugerencia de Microsoft para este http://msdn.microsoft.com/en-us/library/bb907626.aspx#Y800

En la vista grid, agregue un botón de comando y conviértalo en una plantilla, luego dele un nombre de comando en este caso ” AddToCart ” y también agregue CommandArgument “<% # ((GridViewRow) Container) .RowIndex%>“

      

Luego, para crear en el evento RowCommand de gridview, identifique cuándo se activa el comando “AddToCart” y haga lo que quiera desde allí.

 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "AddToCart") { // Retrieve the row index stored in the // CommandArgument property. int index = Convert.ToInt32(e.CommandArgument); // Retrieve the row that contains the button // from the Rows collection. GridViewRow row = GridView1.Rows[index]; // Add code here to add the item to the shopping cart. } } 

** Un error que estaba cometiendo es que quería agregar las acciones en mi botón de plantilla en lugar de hacerlo directamente en el evento RowCommand.

Creo que esto funcionará

      
 void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { Button b = (Button)e.CommandSource; b.CommandArgument = ((GridViewRow)sender).RowIndex.ToString(); } 

Normalmente vinculo estos datos usando el evento RowDatabound con GridView:

 protected void FormatGridView(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { ((Button)e.Row.Cells(0).FindControl("btnSpecial")).CommandArgument = e.Row.RowIndex.ToString(); } } 
      

Esta es la manera tradicional y la última versión de asp.net framework que tiene datos fuertemente tipados y no es necesario usar una cadena como “EMPID”

  

dentro de tu controlador de eventos:

 Protected Sub LnkBtn_Click(ByVal sender As Object, ByVal e As EventArgs) dim rowIndex as integer = sender.Attributes("RowIndex") 'Here you can use also the command argument for any other value. End Sub