2 votes

Événements de retour à partir de DataView

Je présente des informations provenant d'une table de données sur ma page et j'aimerais ajouter une fonctionnalité de tri qui va un peu plus loin qu'un simple tri de colonne. À ce titre, j'ai essayé de placer des boutons de liaison dans les éléments d'en-tête de mon GridView qui renvoient à des fonctions qui modifient les informations de session avant de recharger la page.

Cliquer sur mes liens FAIT provoquent un retour de courrier, mais ils ne semblent pas générer des OnClick événements comme mon OnClick Les fonctions ne sont pas exécutées. J'ai AutoEventWireup et si je déplace les liens hors du GridView, ils fonctionnent bien.

J'ai contourné le problème en créant des ancres régulières, en ajoutant des requêtes à leur hrefs et les vérifier au chargement de la page, mais je préférerais que ce soit C# qui fasse le travail grunt. Avez-vous des idées ?

Mise à jour : Pour clarifier que les ID des contrôles correspondent à leur OnClick les noms des fonctions.

2voto

Jordan Arron Points 20994

Vous êtes sur la bonne voie mais essayez de travailler avec le Nom de la commande/Argument du bouton de liaison. Essayez quelque chose comme ceci :

Dans le HeaderTemplate du TemplateField, ajoutez un LinkButton et définissez les paramètres CommandName et CommandArgument.

<HeaderTemplate> 
    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="sort" CommandArgument="Products" Text="<%# Bind('ProductName")' />
</HeaderTemplate>

Ensuite, définissez l'événement RowCommand du GridView

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "sort")
    {
        //Now sort by e.CommandArgument

    }
}

De cette façon, vous avez un grand contrôle sur vos LinkButtons et vous n'avez pas besoin de faire beaucoup d'efforts pour en assurer le suivi.

0voto

samjudson Points 27483

Deux choses à garder à l'esprit lors de l'utilisation d'événements sur des contrôles générés dynamiquement en ASP.Net :

  • Tout d'abord, les contrôles doivent idéalement être créés dans le gestionnaire d'événements Page.Init. Cela permet de s'assurer que les contrôles ont déjà été créés avant l'exécution du code de traitement des événements.
  • Ensuite, vous devez attribuer la même valeur à la propriété ID des contrôles, afin que le code du gestionnaire d'événements sache que c'est le contrôle qui doit gérer l'événement.

0voto

Eric Z Beard Points 18473

Vous pouvez spécifier la méthode à appeler lorsque le lien est cliqué.

<HeaderTemplate>
    <asp:LinkButton
        ID="lnkHdr1"
        Text="Hdr1"
        OnCommand="lnkHdr1_OnCommand"
        CommandArgument="Hdr1"
        runat="server"></asp:LinkButton>
</HeaderTemplate>

Le code-behind :

protected void lnkHdr1_OnCommand(object sender, CommandEventArgs e)
{
    // e.CommandArgument
}

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