none
ImageButton dans GridView RRS feed

  • Question

  • Bonjour,

     

    apres plusieurs essais je n'arrive pas a mettre un evenement a un imageButton dans un gridView

     

    Le gridview, j'ai dans un itemTemplate deux imageButtons, rien de bien compliqué

    Code Snippet

    <asp:GridView ID="gv1" runat="server" AutoGenerateColumns="False"

    DataKeyNames="NumCategorie,NumLangue" onrowcommand="gv1_RowCommand"

    EnableViewState="False" Width="453px" CssClass="table" onrowdatabound="gv1_RowDataBound">

    <Columns>

    <asp:BoundField DataField="Lien" HeaderText="Lien" >

    <ItemStyle CssClass="td" />

    </< FONT>asp:BoundField>

    <asp:TemplateField HeaderText="Langue">

    <ItemTemplate>

    <%#Parametres.Langues.LangueToString(Eval("NumLangue")) %>

    </< FONT>ItemTemplate>

    <ItemStyle CssClass="td" />

    </< FONT>asp:TemplateField>

    <asp:TemplateField ShowHeader="False">

    <ItemTemplate>

    <asp:ImageButton ID="ibtn11" runat="server" CommandName="Modifier" ImageUrl="~/Images/Modifier-115x20.png" />

    <asp:ImageButton ID="ibtn12" runat="server" CommandName="Supprimer" ImageUrl="~/Images/Supprimer-115x20.png" OnClientClick="return confirm('Comfirmez-vous la suppression du titre de rubrique');" />

    </< FONT>ItemTemplate>

    <ItemStyle HorizontalAlign="Right" CssClass="btn" />

    </< FONT>asp:TemplateField>

    </< FONT>Columns>

    <HeaderStyle CssClass="th" />

    </< FONT>asp:GridView>

     

     

    Lors de la liaison de ligne de donnée j'ajoute l'évenement a l'imageButton.

    pour le moment je test uniquement l'imagebutton Id="ibtn1".

     

    j'ai biensur rempli mon evenement  RowCommand du gridView. qui je pense ne sert pas a grand chose dans cette circonstance (aucune remonté en debug)

    Code Snippet

    protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

    if (e.Row.RowType == DataControlRowType.DataRow)

    {

    ImageButton ibtn = (ImageButton)e.Row.Cells[2].FindControl("ibtn11");

    ibtn.Click += new ImageClickEventHandler(imageButtonCilck);

    }

    }

     

     

     

    et bien quand je click, a priori je click dans le vent. pas d'evenement en vu pour le moindre imagebutton sur le gridview.

    j'ai testé en itemCreated lors de la creation des ligne pareil pas d'evenement.

     

    je dois me rendre a l'evidence, je coule.

     

    Merci

    mercredi 7 mai 2008 00:17

Toutes les réponses

  • Bonjour,

    Le problème vient du fait que lorsque vous cliquez sur le bouton, un PostBack à lieu et dans ce post back vous ne réaffectez pas (ou pas assez tôt) le handler. La page reçoit bien l'infos que le bouton a été cliqué mais il n'y a plus de handler dessus...

    Pour résoudre le problème vous avez plusieurs solutions :

    1. Faire dans tout les cas, premier appel et post back, votre binding lors de l'évènement Init. Je vous déconseille cette solution vu que vous voulez changer les données et les données mises à jour seraient perdu.
    2. Utiliser un handler sur l'évènement RowCommand de votre GridView. Cette évènement est levé lorsqu'une commande sruvient sur le GridView. Tous les clics sur vos ImageButton léveront cette évènement.
    3. Utiliser les colonnes de type Edit,Update,Cancel et Delete. Ces colonnes léve un évènement spécifique sur la GridView.

    Vous trouverz ci dessous un exemple utilisant la solution 2 que je vous recommande :

     

    Code Snippet

    protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e)

    {

    // action spécifique

    switch (e.CommandName)

    {

    case "Modifier":

    // votre code...

    break;

     

    case "Supprimer":

    // votre code...

    break;

    }

    }

     

     

    Si vous avez besoin d'une infos sur la ligne (par exemple un identifiant), vous pouvez ajouter cette infos dans la propriété CommandArgument de vos ImageButton par exemple.

    mercredi 7 mai 2008 08:32
  • bonjour,

     

    avec l'option n° 2 effectivement on retombre dans le principe de base du GridView avec les ButtonField type image.

     

    Le choix de l'itemTemplate est uniquement pour implementé un appel de script client pour une comfirmation avant evenement.

     

    Je reconnais tout de meme, que le choix vient d'un manque de compréhension liée a l'ajout de script client sur un ButtonField.

     

    je vais donc creusé le sujet

    Dans l'attente

    Cordialement

     

    mercredi 7 mai 2008 12:54
  • probleme resolu

     

    c'etait un probleme de ViewState (c'est pas la premiere fois que cela m'arrive).

    j'ai bien conservé mon ItemTemplate avec mes ButtonImage, rempli le CommandArgument, et recharge le GridView.

     

    Cela ma encore permi d'aprpofondir encore le GridView.

     

    Encore merci

     

     

     

    mercredi 7 mai 2008 15:04