Question

J'ai un Gridview avec ImageButtons ajouté à une colonne via un templatefield. J'ai associé une fonction à l'option "OnClick". événement.

Une fois dans cette fonction, comment puis-je obtenir l'index de la ligne sur laquelle le bouton a été cliqué. Il semble que tout ce que j'ai est les coordonnées de la souris sur la page.

Était-ce utile?

La solution

Au lieu de parcourir en boucle les lignes, vous pouvez utiliser ceci

<asp:ImageButton runat="server" id="ibtn1" ... RowIndex='<%# Container.DisplayIndex %>' 
OnClick="button_click"/>

...

protected void button_click(object sender, EventArgs e){
    ImageButton ibtn1 = sender as ImageButton;
    int rowIndex = Convert.ToInt32(ibtn1.Attributes["RowIndex"]);

    //Use this rowIndex in your code
}

Autres conseils

Transmettez l'expéditeur en un ImageButton, puis attribuez NamingContainer du bouton d'image à une ligne:

VB:

Dim btn as ImageButton = CType(sender, ImageButton)

Dim row as GridViewRow = CType(btn.NamingContainer, GridViewRow)

C #:

ImageButton btn = (ImageButton)sender;

GridViewRow row = (GridViewRow)btn.NamingContainer;

Convenez avec bdukes que l'option la plus simple consiste à utiliser le CommandArgument. Associez le numéro d'identification unique de vos données à cette propriété, puis gérez l'événement _RowCommand.

Par exemple:

<asp:TemplateField >
    <HeaderStyle Width="20" />
    <ItemTemplate>
        <asp:ImageButton ImageUrl="images/icons/iCal.png" CommandArgument='<%# Eval("Event_ID") %>' ToolTip="iCal" runat="server" Height="18" Width="18" />
    </ItemTemplate>
</asp:TemplateField>


Protected Sub gv_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv.RowCommand

   e.CommandArgument    'use this value in whatever way you like

End Sub

Le moyen le plus simple que j'ai trouvé consiste à utiliser Evénement de commande sur Cliquez sur l'événement et envoyez l'ID d'élément en tant qu'argument de la commande.

Vous pouvez également parcourir les lignes du GridView et comparer le bouton Image de la ligne à l'argument sender de votre événement Click.

C'est un très bon truc. J'ai un autre tour aussi. Vous pouvez l'essayer ...

 protected void userGridview_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            GridViewRow rowSelect = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
            int rowindex = rowSelect.RowIndex;
         }
    }

C'est aussi une bonne méthode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top