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

C# Discussion :

Combobox avec beaucoup de lignes [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Asticoco
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 20
    Par défaut Combobox avec beaucoup de lignes
    Bonjour, je souhaitais savoir comment faire pour mettre environ 200000 lignes dans une combobox dans Visual Studio 2017 : je m'explique.

    Dans mon logiciel fait avec Visual Studio, je saisi le nom d'un ville dans une combobox : il s'agit de 1200 lignes de villes > ce qui entre largement dans un combobox (inferieur au nombre maximal de lignes possible dans une combobox).

    Le problème est que je souhaiterais faire la même chose avec toute les adresses d'Ile-de-France (env. 200000 lignes en csv ou txt). J'avais trouvé au départ un moyen, à l'aide d'un tuto, d'envoyer le fichier txt de 4.0 Mo dans la combobox au chargement de la page. Le problème est que c'est trop lourd et que la fenêtre ne peut pas se charger

    Connaissez vous une autre solution et si oui me montrer un exemple (je suis débutant) ? Merci d'avance !

    Asticoco

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 666
    Par défaut
    Bonjour,

    Même si le programme n'avait pas de mal a tout charger, c'est une catastrophe une Combo Box aussi fournie niveau UI / UX.

    Il faut filtrer en amont. Soit diviser par villes, arrondissements, etc ..., soit mettre un système de recherche en place.

    Si tu optes pour la deuxième solution, voici un début de solution :

    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
    21
    22
    23
    24
    25
    26
    27
     
            private void TextBoxTextChanged(object sender, EventArgs e)
            {
                if (textBoxSearch.TextLength > 2) // textBoxSearch est la text box qui te servira a rentrer la recherche. Ici on ne commence la recherche qu'a partir de 3 caractères (Libre a toi de mettre plus).
                {
                    var search = adresses.Where(t => t.Contains(textBoxSearch.Text)).ToArray(); // Addresses est le tableau / la liste ou sont stockées toutes les adresses.
     
                    comboBoxAdresses.Items.Clear(); // comboBoxAdresses est la fameuse combo Box problématique. On la nettoie avant.
     
                    for (int i = 0; i < search.Length; i++)
                    {
                        comboBoxAdresses.Items.Add(search[i]); // On ajoute toutes les adresses correspondantes
                    }
     
                    if (search.Length != 0) // Pour éviter une erreur au cas ou si la recherche est infructueuse
                    {
                        comboBoxAdresses.SelectedItem = search[0]; // On affiche le premier élement.
                    }
                }
     
                else
                {
                    comboBoxAdresses.Items.Clear();
     
                    comboBoxAdresses.Text = "";
                }
            }
    Tu ajoutes une Text Box, celle ou tu rentrera ta recherche, et tu utilises l’événement TextChanged de celle-ci pour effectuer la recherche a chaque frappe du clavier. Tu n'as qu'a remplacer les noms que j'ai mis et ça devrait marcher.

    Voici ce que ça donne avec un jeu de noms de villes

    Nom : aZJA3s0.png
Affichages : 172
Taille : 3,7 Ko

    Bien sûr ce système est basique et largement améliorable.

  3. #3
    Membre averti Avatar de Asticoco
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 20
    Par défaut
    Bonjour, merci beaucoup pour votre réponse !

    En effet je trouve que la solution n°2 est mieux car séparer ma liste en 1200 communes risque d'être assez long

    Juste une petite question : la ligne 6 qui récupère la liste des adresses, où est-ce que je doit indiquer le nom du fichier ?

    J'essaye comme même ça voir si ça va et je vous redis.

    Merci d'avance.

  4. #4
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 666
    Par défaut
    Bonjour,

    Il suffit de remplacer par ce que tu utilises pour stocker les différentes adresses (liste ou tableau). Personnellement j'utilises File.ReadAllLines("fichier.txt") pour lire le fichier.

    Attention je ne parlais pas de faire une Combo Box par ville mais bien de faire (par exemple) une Combo Box "villes" qui filtrerai l'autre Combo Box "adresses". Mais bon comme tu l'as dis, la deuxième solution est mieux .

  5. #5
    Membre averti Avatar de Asticoco
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 20
    Par défaut
    Ok merci j'ai déjà fait le design :

    Nom : devenv_2020-01-31_09-10-50.png
Affichages : 174
Taille : 4,4 Ko

  6. #6
    Membre averti Avatar de Asticoco
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2020
    Messages : 20
    Par défaut
    Merci infiniment pour votre aide : ça marche parfaitement !

    Pour éviter les lags lors de l'écriture j'ai remplacé textbox_TextChanged par textbox_Enter comme ça, ça affiche dès que l'on fait entrée. Par contre mon problème est que tout ça a été réalisé dans une fenêtre secondaire

    > après avoir rentré l'adresse, je la met dans une variable mais comment faire pour envoyer celle-ci dans la fenêtre précédente ?

    Merci.

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

Discussions similaires

  1. combobox avec ligne vide ET datasource
    Par petitours dans le forum C#
    Réponses: 8
    Dernier message: 17/09/2016, 11h29
  2. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  3. performance sur une listview avec beaucoup de lignes
    Par jerem_orga dans le forum jQuery
    Réponses: 4
    Dernier message: 01/02/2012, 10h24
  4. Combobox avec une image devant chaque ligne
    Par vexal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 09/02/2008, 12h22
  5. PB de chargement de combobox avec une requete
    Par bubu1905 dans le forum Bases de données
    Réponses: 9
    Dernier message: 23/03/2005, 16h14

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