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

VB.NET Discussion :

Ajouter une ligne "générique" tout en haut d'une combobox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Par défaut Ajouter une ligne "générique" tout en haut d'une combobox
    Bonjour,

    Dans mon formulaire, j'ai un combobox que je charge à l'aide d'une requête SQL:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT*Ref, Client FROM TblClients ORDER BY Client

    À cette liste de clients, je voudrais ajouter une ligne qui s'affiche tout en haut, du genre "Nouveau" sur laquelle l'utilisateur doit cliquer si le client n'est pas dans la liste.

    Je pensais faire une requête UNION de ce type:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Ref, Client FROM TblClients UNION SELECT "", "Nouveau" FROM TblClients ORDER BY Client

    mais ça ne fonctionne pas. Il y une erreur dans la partie "FROM" mais je ne sais pas quoi mettre puisque cette ligne ne provient justement pas d'un tableau en particulier.
    Je ne suis d'ailleurs pas sûr que ce soit le meilleur moyen d'arriver à ce que je veux.
    Il faut aussi que je puisse détecter facilement quand cette fameuse ligne sera sélectionnée par l'utilisateur pour ouvrir le formulaire d'ajout d'un client.

    Qu'en pensez-vous ?

    Merci beaucoup

    Guillaume

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Bonjour,

    Sur le principe, ce n'est pas à la requête de traiter cette problématique.
    L'approche que j'utiliserais serait la suivante :
    - le résultat de ta requête doit être stocké dans un objet (DataTable, List<Object>) auquel est bindée ta Combobox.
    Tu peux alors ajouter une élément "générique" à cet objet. Il suffit de l'insérer en première position.

  3. #3
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Bonjour,

    Ne pourrais tu pas ajouter l'élément "Nouveau" au résultat de ta requête au lieu de l'ajouter dans ta requête?

    Pour détecter la sélection d'un item de ta combobox, utilise l'évènement SelectedValueChanged (ou SelectedIndexChanged).

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    le mieux est en effet de rajouter l'item après l'exécution de la requête

    il faudrait aussi nous dire comment tu remplis le combobox

    sinon par la requête ca donnerait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Ref, Client FROM TblClients 
    UNION SELECT NULL, 'Nouveau'
    ORDER BY Client
    Avec union il faut que les colonnes aient le même type sur chaque select
    pour la ref si c'est un entier, tu peux mettre -1 à la palce de null

    le "nouveau" sera repérable dans selecteditem grace à -1 ou null
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Par défaut
    Merci à tous pour toutes ces pistes.

    Voici comment je remplis mon combobox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = D:\Data\bd.mdb;")
            Dim selStr As String = "SELECT Ref, Client FROM TblClients ORDER BY Client"
            da1 = New OleDbDataAdapter(selStr, conn)
            Dim ds1 As New DataSet()
            conn.Open()
            da1.Fill(ds1, "CboClient")
            conn.Close()
     
            Dim dt1 As DataTable = ds1.Tables("CboClient")
            Me.CboClient.DataSource = dt1
            Me.CboClient.ValueMember = "Ref"
            Me.CboClient.DisplayMember = "Client"
            Me.CboClient.SelectedIndex = -1
    J'avoue bien humblement ne pas savoir comment ajouter l'item au résultat de la requête ou à la datatable...

    Merci encore pour votre aide

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonsoir,

    Voici la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           Dim row as DataRow = ds1.Tables("CboClient").NewRow()
           row("Ref") = 0
           row("Client") = "Nouveau"
           ds1.Tables("CboClient").Rows.Add(row)
    Voir MSDN pour DataTable.NewRow et les cours / tuto sur dvp

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 127
    Par défaut
    Merci pour votre aide, j'apprends plein de trucs grâce à vous !

    @ Pol63: en appliquant ta requête SQL, j'avais encore une erreur sur le From, par contre en trifouillant un peu, je suis arrivé à une requête qui marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Ref, Client FROM TblClients UNION SELECT NULL as Ref, ""***NOUVEAU*CLIENT***"" as Client FROM TblClients ORDER BY Client"
    (j'ai mis ces astérisques autour de "nouveau client" simplement pour détacher cette entrée des autres mais aussi pour qu'elle se retrouve en première position)

    Ça fonctionne bien comme ça, même pour repérer lorsque cet item est sélectionné avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If Me.CboClient.SelectedIndex = 0 Then
    Le problème est donc pour ainsi dire résolu, mais comme vous êtes à peu près tous d'accord pour dire que ce n'est pas la méthode la plus "propre" pour faire ça, j'aimerais aussi essayer avec l'autre méthode :

    @Sankasssss : merci pour ton aide, le code fonctionne comme je le veux, à un détail près : l'entrée "nouveau" se retrouve tout en bas de la liste. Comment je peux faire pour qu'elle se trouve au début (je ne peux pas jouer avec le tri alphabétique, puisqu'elle n'est pas prise en compte dans la requête).

    Autre petit souci : si j'utilise le même code que ci-dessus pour détecter la sélection de cette ligne, rien ne se passe, pourtant l'indice sélectionné est bien "0" là aussi ? Je comprends pas.

    Merci encore pour votre aide !*

    Guillaume

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

Discussions similaires

  1. Ajouter une ligne a un tableau "par le haut"
    Par identifiant_bidon dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 12/06/2011, 10h43
  2. Obtenir une ligne de résultat dans tout les cas
    Par Apo94 dans le forum Développement
    Réponses: 5
    Dernier message: 02/02/2011, 12h06

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