Saltar al contenido

ASP.NET GridView RowIndex como CommandArgument

Solución:

He aquí una forma muy sencilla:

<asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" 
                 CommandArgument="<%# Container.DataItemIndex %>" />

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 la paginación habilitada.

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 esto http://msdn.microsoft.com/en-us/library/bb907626.aspx#Y800

En la vista de cuadrícula, agregue un botón de comando y conviértalo en una plantilla, luego dele un nombre de comando en este caso “Añadir al carrito“y también agregue CommandArgument “<% # ((GridViewRow) Container) .RowIndex%>“

<asp:TemplateField>
  <ItemTemplate>
    <asp:Button ID="AddButton" runat="server" 
      CommandName="AddToCart" 
      CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
      Text="Add to Cart" />
  </ItemTemplate> 
</asp:TemplateField>

Luego, para crear en el evento RowCommand de la vista de cuadrícula, 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 el botón de mi plantilla en lugar de hacerlo directamente en el evento RowCommand.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *