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 :

Impossible d'afficher les valeurs d'une requête dans une combobox


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut Impossible d'afficher les valeurs d'une requête dans une combobox
    Bonjour à tous,

    Je n'arrive pas à afficher les valeurs que retourne ma requête dans ma combobox (de type dropdownlist)

    Voici le behind-code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    J’exécute au préalable ma requête qui me renvoie des valeurs
     
    If connection.getConnection.State = ConnectionState.Closed Then connection.openConnection()
     
         Dim dReader As System.Data.SqlClient.SqlDataReader
     
         dReader = sortImage.ExecuteReader()
         sortImageList.Items.Clear()
     
         Do While dReader.Read()
              sortImageList.Items.Add(dReader.GetValue(0).ToString())
         Loop
    End If
    dReader.Close()

    Ma requête est du type :

    SELECT DISTINCT tb1.champs1 FROM TABLE1 AS tb1 JOIN ON ...

    Et si je fais un MsgBox(sortImageList.Items.Count), j'ai bien des valeurs.

    Chose surprenante, le bouton qui est à coté de ma combobox se déplace s'il y a des valeurs :



    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    D'un point de vue architectural, c'est zéro pointé. On ne doit jamais créer de lien direct entre l'UI et la couche d'accès aux données (DAL) comme tu l'as fait.

    Comme j'imagine que tu as dû faire ça un peu partout dans ton programme, je vais te donner une solution crade pour arriver à tes fins...

    Crée une classe, qui servira à recueillir les données provenant de ta base :
    Code VB.NET : 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
    Public Class MaClass
     
        Private _monString As String
        Public Property MonString() As String
            Get
                Return Me._monString
            End Get
            Set(ByVal value As String)
                Me._monString = value
            End Set
        End Property
     
        Public Sub New(ByVal monString As String)
            Me._monString = monString
        End Sub
     
    End Class

    Ensuite pour charger ta DropDownList, il suffit d'exécuter la requête SQL, puis de stocker les résultats dans cette liste. Enfin, on bind la liste sur le DropDownList :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim data As New List(Of MaClass)
     
    Do While dReader.Read()
        data.Add(New MaClass(dReader.GetValue(0).ToString())
    Loop
     
    Me.sortImageList.DataSource = data
    Me.sortImageList.DataBind()
    Et bien sûr, il ne faut pas oublier de préciser les valeurs des propriétés DataTextField et DataValueField. On y met le nom des propriétés contenues dans l'objet métier (ici l'objet métier est MaClass) :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.sortImageList.DataTextField = "MonString"
    Me.sortImageList.DataValueField = "MonString"
    Il faut mettre le code ci-dessus avant l'appel à la méthode DataBind, sinon ça ne marchera pas. Il est aussi possible de faire ça dans le code ASPX de la page :
    Code ASPX : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:DropDownList ID="sortImageList" runat="server" DataTextField="MonString" DataValueField="MonString" />

    Si tu veux faire ça plus proprement, il te faut au minimum 3 couches :
    - UI (User Interface, la couche de présentation = ce que voit l'utilisateur),
    - BLL (Business Logic Layer, la couche de logique métier)
    - DAL (Data Access Layer, la couche d'accès aux données)
    Et un projet DTO (Data Transfert Objects) qui te permettra de transporter des choses entre les couches.

    Dans la DAL, tu auras toute la logique d'accès aux données, donc c'est à ce niveau que la requête sera exécutée. Les données seront ensuite stockées dans la BLL, où il y a la classe "MaClass" qu'on a créé ici. Enfin, on viendra binder la DropDownList qui se trouve dans l'UI sur un objet de type List(Of MaClass).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Bonjour DotNetMatt.

    Avant toute chose, merci pour ta réponse claire et détaillée

    Je viens d'utiliser tes solutions mais ca ne fonctionne pas ... Voici ce que j'ai fais :

    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
     
    Public Class ImageListClass
        Private _image As String
        Public Property Image() As String
            Get
                Return Me._image
            End Get
            Set(ByVal value As String)
                Me._image = value
            End Set
        End Property
     
        Public Sub New(ByVal monString As String)
            Me._image = monString
        End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim dReader As System.Data.SqlClient.SqlDataReader
    dReader = sortImage.ExecuteReader()
     
    Dim data As New List(Of ImageListClass)
     
    Do While dReader.Read()
         data.Add(New ImageListClass(dReader.GetValue(0).ToString()))
    Loop
     
    Me.sortImageList.DataTextField = "Image"
    Me.sortImageList.DataValueField = "Image"
    Me.sortImageList.DataSource = data
    Me.sortImageList.DataBind()
    Et pour le code ASP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:ComboBox ID="sortImageList" runat="server" DropDownStyle="DropDownList" MaxLength="100" />
    Je ne vois pas où est le problème ...

    As-tu une idée ?

    Je vais aussi découper la partie DAL de la partie UI

    Encore merci

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Ah effectivement tu utilises le control ComboBox qui provient de l'AJAX Control Toolkit. As-tu bien mis un ToolkitScriptManager (et pas un simple ScriptManager) sur ta page ?
    Code ASPX : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></asp:ToolkitScriptManager>
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Bonjour DotNetMatt,

    Excuse moi pour mon absence.

    As-tu bien mis un ToolkitScriptManager (et pas un simple ScriptManager) sur ta page ?
    Peux-tu m'expliquer comment intégrer ce ToolkitScriptManager stp ? Quand j'essaye de mettre la balise dans ma page aspx, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Seule une instance de ScriptManager peut être ajoutée à la page.
    Pourtant je n'ai pas de ScriptManager dans ma page

    Merci pour ton aide

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Jah73 Voir le message
    Peux-tu m'expliquer comment intégrer ce ToolkitScriptManager stp ?
    Dans mon dernier post je t'ai donné la ligne à rajouter dans ton fichier ASPX. Il faut le mettre au tout début, près de la balise FORM.

    Citation Envoyé par Jah73 Voir le message
    Quand j'essaye de mettre la balise dans ma page aspx, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Seule une instance de ScriptManager peut être ajoutée à la page.
    Pourtant je n'ai pas de ScriptManager dans ma page
    Je ne connais pas l'architecture de ton site, mais as-tu vérifié qu'il n'y en ait pas un sur la master page ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/02/2015, 20h22
  2. Réutiliser des données d'une requête dans une requête
    Par mims1664 dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/02/2009, 14h12
  3. Réponses: 3
    Dernier message: 13/01/2009, 16h55
  4. Réponses: 2
    Dernier message: 02/06/2006, 11h26
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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