55 votes

ASP.NET GridView RowIndex As CommandArgument

Comment pouvez-vous accéder et afficher l'index de ligne d'un élément gridview en tant qu'argument de commande dans un bouton de colonne buttonfield?

 <gridview>
<Columns>
   <asp:ButtonField  ButtonType="Button" 
        CommandName="Edit" Text="Edit" Visible="True" 
        CommandArgument=" ? ? ? " />
.....
 

97voto

George Points 2918

Voici un moyen très simple:

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

34voto

Rich Points 1046

MSDN dit que:

Le ButtonField classe remplit automatiquement la CommandArgument propriété avec la valeur de l'indice. Pour les autres boutons de commande, vous devez définir manuellement le CommandArgument propriété du bouton de commande. Par exemple, vous pouvez définir la CommandArgument à <%# Container.DataItemIndex %> lorsque le contrôle GridView n'a pas de pagination est activée.

Donc, vous ne devriez pas besoin de le configurer manuellement. Une ligne de commande avec GridViewCommandEventArgs serait alors le rendre accessible; par exemple

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

12voto

Cesar Duran Points 91

Voici Microsoft pour cette Suggestion http://msdn.microsoft.com/en-us/library/bb907626.aspx#Y800

Sur le gridview ajouter un bouton de commande et de le convertir en un modèle, puis de lui donner un commandname dans ce cas,"AddToCart" et également ajouter CommandArgument "<%# ((GridViewRow) Conteneur).RowIndex %>"

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

Ensuite, pour créer sur le RowCommand cas de la gridview identifier quand le "AddToCart" la commande est déclenchée, et faire ce que vous voulez à partir de là

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

**Une erreur que je faisais c'est que je voulais ajouter des actions sur mon modèle de bouton au lieu de le faire directement sur le RowCommand Événement.

5voto

Je pense que ça va marcher.

 <gridview>
<Columns>

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

1voto

fARcRY Points 1391

void GridView1_RowCommand (expéditeur d'objet, GridViewCommandEventArgs e) {

 Button b = (Button)e.CommandSource;
b.CommandArgument = ((GridViewRow)sender).RowIndex.ToString();
 

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X