IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Utilise un CascadingDropDown (le remplir)


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Utilise un CascadingDropDown (le remplir)
    Bonjour

    J'essai de mettre en oeuvre un série e liste déroulante en cascade, le choix de la première rempli la suivante et ainsi de suite.

    J'ai trouvé la doc du AjxControlToolKit censé faire cela : http://www.asp.net/AJAX/AjaxControlT...gDropDown.aspx

    Outre le fait que l'exemple de code soit fait en C# (j'ai réussi à comprendre comment il fonctionne) je n'arrive aps àcompendre comment ils vont chercher les donéne dans la base.

    Visiblement ils utilisent un objet maison Cars qui retourne un truc que je n'arrive pas à définir.

    Alors questions :
    - pouvez vous m'aider à comprendre comment ils vont chercher les données pour les mettre dans la DDL
    - connaissez vous un autre système (plus simple) pour faire ce que je cherche à faire

    Merci d'avance.

  2. #2
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Salut Zooffy,

    ca ressemble au l'autocompleteExtender que tu as déja mis en place.
    Cela se base sur un service et la méthode du service.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ServicePath="CarsService.asmx"
    ServiceMethod="GetDropDownContents"
    Pour faire plus simple et sans rechargement de page, tu peux mettre des dropdowlists dans des ajax updatepanel et implementer le selectindexchange de tes DropDownLists.

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    Jusque là, j'ai suivi et c'est vrai que ça y ressemble.
    Sauf que, là, il veut en retour de WebMethode un CascadingDropDownNameValue a lieu d'un Array.

    Et là, je n'arrive pas à lui donner ce qu'il veut.

    Voici ma WebMethode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <WebMethod()> _
        Public Function RemplirListeGeoPolitique(ByVal knownCategoryValues As String, ByVal category As String) As AjaxControlToolkit.CascadingDropDownNameValue
     
            Dim valret As New List(Of AjaxControlToolkit.CascadingDropDownNameValue())
            Dim dt As DataTable = New DManager("DataDev").RetournerTable("EXEC dbo.GLOBAL_ContenuZone" & category)
     
            For Each r As DataRow In dt.Rows
                valret.Add(New AjaxControlToolkit.CascadingDropDownNameValue(r(0), r(1)))
            Next
     
            Return valret.ToArray()
        End Function
    Et sur la ligne du valret dans le For Each il me dit :
    Une valeur de type 'AjaxControlToolkit.CascadingDropDownNameValue' ne peut pas être convertie en 'Tableau à 1 dimension(s) de AjaxControlToolkit.CascadingDropDownNameValue'.
    Je comprends pas ce qu'il veut mettre dedans. Pour les arguments donné par l'autocomplétion sont simples : deux String.

    Vois tu d'où pourrais provenir le souci ?

  4. #4
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    essaies de mettre r(0).tostring et r(1).tostring

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci. J'ai avancé entre les deux. Je sais pas ce que j'ai pu modifier, mais ça c'est mis à fonctionner.

    Par contre, je bloque maintenant sur la cascade elle même
    Je rempli bien ma première liste. Ce qui occupe ici est de décensdre dans le découpage géopolitique de la France. Donc ma première liste est celle des régions.

    Ensuite je voudrais avoir la liste des départements contenus dans la région choisie. Mais là il me met un message d'erreur. Je pense que je dois avoir un souci pour comprendre l'utilisation des deux variables en paramètre.
    Voici le code HTML de la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <asp:DropDownList ID="lstRegion" runat="server"></asp:DropDownList><br />
    <asp:DropDownList ID="lstDepartement" runat="server"></asp:DropDownList><br />
    <asp:DropDownList ID="lstArrondissement" runat="server"></asp:DropDownList><br />
    <asp:DropDownList ID="lstVille" runat="server"></asp:DropDownList><br />
    <asp:Button ID="btnChoix" runat="server" Text="Choisir" />
    <ajaxToolkit:CascadingDropDown ID="cddRegion" runat="server"
        TargetControlID="lstRegion"
        Category="2"
        PromptText="Choisissez une région"
        ServicePath="~/GMPhotoProfil.asmx"
        ServiceMethod="RemplirListeGeoPolitique"
    ></ajaxToolkit:CascadingDropDown>
    <ajaxToolkit:CascadingDropDown ID="cddDepartement" runat="server"
        TargetControlID="lstDepartement"
        ParentControlID="lstRegion"
        Category="3"
        PromptText="Choisissez un département"
        ServicePath="~/GMPhotoProfil.asmx"
        ServiceMethod="RemplirListeGeoPolitique"></ajaxToolkit:CascadingDropDown>
    Puis le code la méthode, dernière version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <WebMethod()> _
        Public Function RemplirListeGeoPolitique(ByVal knownCategoryValues As String, ByVal category As String) As Array
            Dim valret As New List(Of AjaxControlToolkit.CascadingDropDownNameValue)
            Try
                If knownCategoryValues = "" Then
                    knownCategoryValues = "199"
                End If
                Dim dt As DataTable = New DManager("DataDev").RetournerTable("EXEC dbo.GLOBAL_ContenuZone " & knownCategoryValues)
                For Each r As DataRow In dt.Rows
                    valret.Add(New AjaxControlToolkit.CascadingDropDownNameValue(r(0), r(1)))
                Next
            Catch ex As Exception
                Logage(ex.Message)
            End Try
            Return valret.ToArray()
        End Function
    Et le message d'erreur que je trap avec le ex.mesasge :
    Syntaxe incorrecte vers ':'.
    Pas trés explicite......

    Sachant que ma Proc Stock prends comme paramètre l'identifiant d'une zone (région, département, ...) et va chercher ce qu'il faut dans la table pour remonter une liste d'identifiant et de nom.
    Sachant aussi que ma table de GeoPolitique est architecturée sur le principe des arbres décisionnels de notre bien aimé SQLPRO.

    Du coup, peut être que je n'utilise pas bien les paramètres.

    Qu'en penses tu ?

  6. #6
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Arf, je n'ai pas assez étudié ce contrôle. Mais j'ai trouvé qqchose d'interressant sur ce site.

    http://aspalliance.com/1183_Creating_a_CascadingDropDown_Using_AJAX.all

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bon, je crois que j'ai avancé, enfin à priori, sauf que je capte pas ce que j'ai trouvé. Grâce à mon outil de logage je peux capter plein de chose qu'on ne voit pas en AJAX et là j'ai découvert un truc qui me laisse sur mon céans, parce que je connais pas.

    Dans la variable knownCategoryValues y a un truc qui se rajoute, liste aprés liste. Du coup, j'ai changé la variable category dans chaque CDD.

    Maintenant, j'ai repris un morceau de code de l'exemple que je comprenais pas et je pense que c'est lié. Sauf que j'arrive pas à le faire fonctionner.

    Dans l'exmple ils utilisent un StringDictionary, visiblement pour envoyer vers leur objet maison l'identifiant de la catégorie retenu par la précédente liste. Ils mettent aussi un bout de code (voir plus loin) qui permet de parser ce truc en Integer (et à mon avis en ce que tu veux pour l'envoyer vers la BDD).

    Voici la chaine de knownCategoryValues qui évolue liste aprés liste :
    [rien]
    2:200;
    2:200;3:224;
    J'ai mis ça dans le code, avant mon test pour savoir si c'est vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                Dim kv As StringDictionary = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
                Dim modelId As Integer
                If Not kv.ContainsKey(category) OrElse Not Int32.TryParse(kv(category), modelId) Then
                    Logage("que dalle")
                End If
                Logage(modelId)
    A chaque liste choisie, même la première (ce qui est normal) il me marque "que dalle" et sur le deuxième logage il me donne 0.

    Du coup, j'en déduis que l'orsque je j'aurais compris comment extraire la dernière valeur de la liste, je pourrais l'envoyer en paramètre de la Proc Stock.

    Vois de quoi ça parle ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Sprintf / utilisation des espaces pour remplir une ligne
    Par exilquery dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2012, 17h46
  2. Réponses: 2
    Dernier message: 10/02/2012, 15h22
  3. Utilisation de DHTML pour remplir un formulaire
    Par OlivierGrenoble dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/02/2010, 23h36
  4. utilisation de popup pour remplir un formulaire php
    Par kro35 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/06/2006, 12h03
  5. Réponses: 36
    Dernier message: 13/05/2004, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo