Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : [ASPX][VB.NET] ItemCommand vs SortCommand [ Archives ASP & ASP.NET / ASP.net ] (lucie houel)

lundi 25 avril 2005 à 10:05:51 | [ASPX][VB.NET] ItemCommand vs SortCommand

lucie houel

Bonjour à tous et à toutes,

Voici mon problème : j'ai un datagrid qui présente des lignes triables et que l'on peut éditer, supprimer, etc... Jusqu'ici tout à fait classique.

Quand je clique sur mes entêtes de colonne, c'est l'évènement Datagrid.itemcommand plutot que Datagrid.sortcommand qui est levé (j'ai regardé avec le debuuger de visual studio ce qui s'exécute).

Après quelques tests voilà ce que j'ai pu découvrir :

dans ma fonction liée à l'évènement itemcommand, j'ai utilisé la propriété : e.Item.ItemIndex avant de faire un select case sur le e.command (contrairement à ce que je faisais dans mes autres fichiers où là je l'utilisais dans chacun de mes case) :

exemple :

Code:

' Traitement pour chaque action du datagrid déclenchée
Public Sub DG_Renvoi_ItemCommand(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DG_Renvoi.ItemCommand

dim i as integer = Convert.ToInt32(DG_Renvoi.DataKeys(e.Item.ItemIndex))

Select Case e.CommandName

Case "Edite"

' Si l'action est l'édition

...

Case "Annule"

' Si l'action est l'annulation de l'édition

...

Case "Modifie"

' Si l'action est la modification

...

Case "Supprime"

...

End Select

End Sub


dans ce cas, je n'entre pas dans la bonne fonction. Maintenant si je fais :

Code:

' Traitement pour chaque action du datagrid déclenchée
Public Sub DG_Renvoi_ItemCommand(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DG_Renvoi.ItemCommand


Select Case e.CommandName

Case "Edite"

' Si l'action est l'édition

...

Case "Annule"

' Si l'action est l'annulation de l'édition

...

Case "Modifie"

' Si l'action est la modification

dim i as integer = Convert.ToInt32(DG_Renvoi.DataKeys(e.Item.ItemIndex))

Case "Supprime"

dim i as integer = Convert.ToInt32(DG_Renvoi.DataKeys(e.Item.ItemIndex))

End Select

End Sub

Cette fois quand je clique sur l'entete des mes colonnes, c'est bien dans la fonction de tri que j'entre

Ce n'est qu'un début de réponse .... ca marche ... c'est bien, mais j'aimerais comprendre, donc si quelqu'un a une explication

Merci encore pour votre aide


lundi 25 avril 2005 à 10:49:57 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

Yopyop

Salut,

Ce serait possible de voir le code de ton datagrid (coté HTML) ?

D'habitude moi je fais:
OnDeleteCommand="dgTopics_Delete"
OnUpdateCommand="dgTopics_Update"
OnEditCommand="dgTopics_EditData"
OnCancelCommand="dgTopics_Cancel"
OnSortCommand="dgTopics_SortData"

et du côté code behind j'ai une procédure pour chaque chose...
ca m'évite d'avoir un big SELECT CASE.

yopyop

lundi 25 avril 2005 à 10:55:20 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

lucie houel


<asp:datagrid id="DG_Renvoi" runat="server" AutoGenerateColumns="False" BorderColor="#999999"
     HorizontalAlign="Center" BorderWidth="1px" CellPadding="3" GridLines="Vertical" Width="100%"
     AllowSorting="True">
     <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="LightSkyBlue"></SelectedItemStyle>
     <AlternatingItemStyle BackColor="White"></AlternatingItemStyle>
     <ItemStyle ForeColor="Black" BackColor="#EEEEEE"></ItemStyle>
     <HeaderStyle ForeColor="White" BackColor="#3596C3"></HeaderStyle>
     <Columns>
      <asp:TemplateColumn SortExpression="dtdemande" HeaderText="Date de demande">
       <HeaderStyle Font-Bold="True" HorizontalAlign="Center" Width="10%"></HeaderStyle>
       <ItemStyle HorizontalAlign="Center"></ItemStyle>
       <ItemTemplate>
        <asp:Label id="LB_DtDemande" runat="server" Text='<%# string.format("{0:d}", DataBinder.Eval(Container, "DataItem.dtdemande")) %>'>
        </asp:Label>
       </ItemTemplate>
       <EditItemTemplate>
        <asp:Label id="LB_DtDemande_Modifie" runat="server" Text='<%# string.format("{0:d}", DataBinder.Eval(Container, "DataItem.dtdemande")) %>'>
        </asp:Label>
       </EditItemTemplate>
      </asp:TemplateColumn>
           <asp:TemplateColumn SortExpression="destinataireDm" HeaderText="Destinataire de la demande">
       <HeaderStyle Font-Bold="True" HorizontalAlign="Center" Width="20%"></HeaderStyle>
       <ItemStyle HorizontalAlign="Center"></ItemStyle>
       <ItemTemplate>
        <asp:Label id="LB_DestinataireDm" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.destinataireDm") %>'>
        </asp:Label>
       </ItemTemplate>
       <EditItemTemplate>
        <asp:Label id="LB_DestinataireDm_Modifie" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.destinataireDm") %>'>
        </asp:Label>
       </EditItemTemplate>
      </asp:TemplateColumn>
            <asp:TemplateColumn SortExpression="destinataireRv" HeaderText="Destinataire du renvoi">
       <HeaderStyle Font-Bold="True" HorizontalAlign="Center" Width="30%"></HeaderStyle>
       <ItemStyle HorizontalAlign="Center"></ItemStyle>
       <ItemTemplate>
        <asp:Label id="LB_DestinataireRv" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.destinataireRv") %>'>
        </asp:Label>
       </ItemTemplate>
       <EditItemTemplate>
        <asp:DropDownList ID="DDL_Ville" OnSelectedIndexChanged="SelectionneVille" AutoPostBack="True" runat="server"
         Width="150"></asp:DropDownList>
        <asp:DropDownList ID="DDL_Personne" enabled="False" runat="server" Width="220"></asp:DropDownList>
       </EditItemTemplate>
      </asp:TemplateColumn>
      <asp:TemplateColumn>
       <HeaderStyle HorizontalAlign="Center" Width="10%"></HeaderStyle>
       <ItemStyle HorizontalAlign="Center"></ItemStyle>
       <ItemTemplate>
        <asp:ImageButton id="IB_Edite" CommandName="Edite" runat="server" ImageUrl="../../img/edit.gif"></asp:ImageButton>
       </ItemTemplate>
       <EditItemTemplate>
        <asp:ImageButton id="IB_Modifie" CommandName="Modifie" runat="server" ImageUrl="../../img/valider.gif"></asp:ImageButton>&nbsp;
        <asp:ImageButton id="IB_Annule" CommandName="Annule" runat="server" ImageUrl="../../img/cancel.gif"></asp:ImageButton>
       </EditItemTemplate>
      </asp:TemplateColumn>
      <asp:TemplateColumn>
       <HeaderStyle HorizontalAlign="Center" Width="10%"></HeaderStyle>
       <ItemStyle HorizontalAlign="Center"></ItemStyle>
       <ItemTemplate>
        <asp:ImageButton id="IB_Supprime" CommandName="Supprime" runat="server" ImageUrl="../../img/delete.gif"></asp:ImageButton>
       </ItemTemplate>
       <EditItemTemplate>
       </EditItemTemplate>
      </asp:TemplateColumn>
     </Columns>
    </asp:datagrid>


lundi 25 avril 2005 à 11:21:03 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

Yopyop

Salut,

Pour différencier les événements de ton datagrid tu dois mettre ce que je t'ai montré
plus haut:

OnDeleteCommand="dgTopics_Delete"
OnUpdateCommand="dgTopics_Update"
OnEditCommand="dgTopics_EditData"
OnCancelCommand="dgTopics_Cancel"
OnSortCommand="dgTopics_SortData"

Cela t'évite de faire un select case... ensuite tu crées les fonctions associées:

Protected Sub dgTopics_EditData(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
Protected Sub dgTopics_Cancel(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
Protected Sub dgTopics_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
Protected Sub dgTopics_Delete(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
Protected Sub dgTopics_SortData(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs)

Bon, en ce qui te concerne est-ce que ton DG_Renvoi_ItemCommand s'occupe du tri également ou est-ce que tu as une autre sub pour ca ?
Si c'est une autre, je peux la voir stp ?

merci
yopyop


lundi 25 avril 2005 à 11:41:59 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

lucie houel

il est vrai que ta méthode est plus claire, mais à priori ca ne remet pas en question la validité de la mienne ?

sinon le tri est bien géré dans une méthode :

' Permet de charger le datagrid des demandes
' se : expression de tri potentielle

 Private Sub AfficheDG(Optional ByVal se As String = "")

        ' On charge le DataView avec la variable de session contenant les demandes,
        ' avec renvoi, renvoyées par le moteur de recherche

        DV_Renvoi.Table = GDTable.InitDemandesAvecRenvoi(VarSession.Demandes)
        ' On applique le tri
        If se.Length <> 0 Then
            DV_Renvoi.Sort = se
        End If
        ' On charge le DataGrid
        DG_Renvoi.DataSource = DV_Renvoi
        DG_Renvoi.DataKeyField = "identifiant"
        DG_Renvoi.DataBind()
        DG_Renvoi.Visible = True
        TB_Renvoi.Visible = True

        Me.AfficheTitres()

End Sub


' Tri du DataGrid
Public Sub TriDemandes(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles DG_Renvoi.SortCommand
        Me.AfficheDG(e.SortExpression)
    End Sub

' Traitement pour chaque action du datagrid déclenchée
    Public Sub DG_Renvoi_ItemCommand(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DG_Renvoi.ItemCommand

       ...

    End Sub

Merci à toi


lundi 25 avril 2005 à 11:49:46 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

Yopyop

re,

est-ce que par hasard quand tu cliques sur un header (pour faire un sort), les 2 méhodes seraient exécutées ?

Genre DG_Renvoi_ItemCommand est exécuté et ensuite TriDemandes (ou l'inverse?)

yopyop

lundi 25 avril 2005 à 12:09:30 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

lucie houel

non juste : DG_Renvoi_ItemCommand

lundi 25 avril 2005 à 13:13:10 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

Yopyop

t'as fait un debug (step by tep) pour voir.

mais en fait je pense que dim i as integer = Convert.ToInt32(DG_Renvoi.DataKeys(e.Item.ItemIndex))  ne fonctionne pas car quand tu cliques sur un header le datakey doit être null (ou 0).

yopyop

lundi 25 avril 2005 à 13:24:21 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

lucie houel

oui tout à fait, j'ai bien vérifié le cheminement et il suit bien ce que j'expliquais dans mon premier message

en ce qui concerne ton explication, je pense que tu dois avoir raison, lorsqu'on clique sur un header, le datakey ou le itemindex doivent être à 0, mais ce qui m'aurait intéressé de savoir c'est pourquoi à ce moment là, c'est l'évènement ItemCommand plutot que SortCommand qui est lancé ? En fait on dirait que l'utilisation de cette ligne de commande au mauvais endroit (hors du select case j'entends) provoque une erreur dans l'évènement généré

lundi 25 avril 2005 à 13:28:24 | Re : [ASPX][VB.NET] ItemCommand vs SortCommand

Yopyop

peut-être simplement parce que les commandes update/delete ne donnent pas d'erreur lorsque tu va chercher l'id (datakey) tandis qu'en le mettant avant ton select case, il va chercher l'id alors qu'elle n'existe pas -> erreur (disfonctionnement). 

yopyop


1 2

Cette discussion est classé dans : case, action, dg, renvoi, itemcommand


Répondre à ce message

Sujets en rapport avec ce message

exeption NullReferenceException [ par melda ] Bonjour,J'aurais besoin d'une aide, après toutes mes recherches infructueuses d'autant plus que je ne sais toujours pas comment utiliser la msdn ;( Je balise form changement propriété action [ par Markus971 ] Bonjour,Je débute en ASP.NET et j'ai un petit problème : j'ai créé un formulaire de base compris dans des balises et disposant d'un bouton de type su equivalent de l'attribut "rel" de la balise <a> en HTML en Action Script 3 [ par Verdan ] J'essaie d'intégrer une vidéo dans mon site web grâce au plugin Videobox. Cependant, le lien prévu initialement se fait par l'intermédiare de la balis Comment faire un double tri dans une arraylist [ par PascalCmoa ] Bonjour à tous,Je viens de réaliser une classe qui me permet de faire un tri sur une arraylist, bon là pas de problème cela fonctionne super bien. Mai Publipostage avec case à cocher [ par bounette ] Bonne soirée,Je travail sous XPJ'ai une base de donnée en Access 2000 dans laquelle il y a des champs oui-non<?xml:names ConfirmButton pour créer des MsgBox [ par dragon ] Bonjour à tous,je suis en train de créer un MsgBox pour un site web. pour ce faire, j'utilise ConfirmButton de l'API AjaxToolkitLe popup s'affiche trè controle de case à cocher dans un frame [ par cigalou84 ] Bonjour à toutes et à tous. Débutant comme beaucoup sur VBa, je bloque sur un code qui, je pense doit être assez simple pour pas mal d'entre vous, mai case à cocher [ par loulou ] bonjourj'aimerais savoir comment on peut faire pour qu'une même case à cocher soit utilisée par plusieurs pages ASP?un exemple :l'utilisateur peut coc probleme de bouton de commande [ par loulou ] bonjourj'aimerais savoir comment on peut faire pour qu'une même case à cocher soit utilisée par plusieurs pages ASP?est ce qu'une même case à cocher p Attribuer un action [ par websinh ] Salut les pros, je voudrais savoir si c'est possible de donner une action sur un bouton dans un formulaire. en effet j'aimerais que quand je presse un


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,560 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.