web-dev-qa-db-fra.com

Obtenir l'index des lignes sur l'événement Asp.net Rowcommand

J'ai une GridView asp.net:

<asp:TemplateField HeaderText="View Faktor" ShowHeader="False" Visible="True">
    <ItemTemplate>
        <asp:ImageButton ID="imgBtn1" CssClass="SelectRow" runat="server" CausesValidation="false"
            CommandArgument='<%#(eval("mprID")) %>' CommandName="ViewFactors" ImageUrl="~/tadarokat/Images/factor.png"
            Text="" />
    </ItemTemplate>
</asp:TemplateField>

Comment puis-je obtenir rowIndex sur l'événement de commande de ligne?

Je veux mettre en évidence (select) la ligne cible lorsque RowCommand se déclenche.

31
Shahin

c'est la réponse à votre question.

GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);

int RowIndex = gvr.RowIndex; 
67
rahularyansharma

ImageButton\Button etc.

CommandArgument='<%# Container.DataItemIndex%>' 

code-behind

protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e)
{
    int index = e.CommandArgument;
}
12
Vincenzo Costa

Si vous avez une commande intégrée de GridView comme insérer, mettre à jour ou supprimer, sur la commande de ligne, vous pouvez utiliser le code suivant pour obtenir l'index:

int index = Convert.ToInt32(e.CommandArgument);

Dans une commande personnalisée, vous pouvez définir l'argument de la commande sur yourRow.RowIndex.ToString(), puis le récupérer dans le gestionnaire d'événements RowCommand. À moins, bien sûr, que vous ayez besoin de l'argument de commande dans un autre but.

4
pallavi

Ou, vous pouvez utiliser une classe control au lieu de leurs types:

GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);

int RowIndex = row.RowIndex; 
3
5377037

J'ai pu utiliser --- rahularyansharma's réponse ci-dessus dans mon propre projet, avec une modification mineure. J'avais besoin d'obtenir la valeur de cellules particulières sur la ligne sur laquelle l'utilisateur clique sur LinkButton. La deuxième ligne peut être modifiée pour obtenir la valeur d'autant de cellules que vous le souhaitez.

Voici ma solution:

GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
string typecore = gvr.Cells[3].Text.ToString().Trim();
1
Davezilla
protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e)
{
    try
    {
        if (e.CommandName == "Delete")
        {
            GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
            int RemoveAt = gvr.RowIndex;
            DataTable dt = new DataTable();
            dt = (DataTable)ViewState["Products"];
            dt.Rows.RemoveAt(RemoveAt);
            dt.AcceptChanges();
            ViewState["Products"] = dt;
        }
    }
    catch (Exception ex)
    {
        throw;
    }
}
protected void gvProductsList_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    try
    {
        gvProductsList.DataSource = ViewState["Products"];
        gvProductsList.DataBind();
    }
    catch (Exception ex)
    {

    }
}
1
Siddhesh