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 :

Liaison de donnée à combobox prend beaucoup de temps.


Sujet :

VB.NET

  1. #1
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut Liaison de donnée à combobox prend beaucoup de temps.
    Bonsoir à tous,

    J'ai développé dernièrement une application qui doit lier un combobox à une table contenant beaucoup de résultat afin de proposer des résultats (rien de bien spécial)
    Le rapatriement des données se fait très vite malgré la grosseur de la table.
    C'est à la liaison entre la table et le combobox que ca prend énormément de temps.
    Voici le code incriminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            CBDossierCourrier.AutoCompleteMode = AutoCompleteMode.Append
            CBDossierCourrier.DropDownStyle = ComboBoxStyle.DropDown
            CBDossierCourrier.AutoCompleteSource = AutoCompleteSource.ListItems
     
            donneDossierCourrier = New ClassDonneeDossiersCourrier(connSQLServer)
            debug.writeLine("Chargement de la table.")
            donneDossierCourrier.chargeTable()
            debug.writeLine("Liaison table / comboBox")
            CBDossierCourrier.DataSource = donneDossierCourrier.table 
            debug.writeLine("Fin liaison table / comboBox")
     
            CBDossierCourrier.ValueMember = "NumInterne"
            CBDossierCourrier.DisplayMember = "Libelle"
    j'obtiens donc dans la console de vs :
    Chargement de la table.
    Liaison table / comboBox
    --- Plus de 30 secondes. ---
    Fin liaison table / comboBox
    Je me demandais donc si il n'y avait pas moyen de lier une table au comboBox de manière à ce que ca soit plus rapide?

    Pour cette application j'avais bidouillé un système sur les évènements keyDown et keyUp afin de n'activer la liaison que quand l'utilisateur tape 3 lettres avec un like sur la bd (moins de données à lier, donc plus rapide).
    Ca fonctionne mais le code n'est vraiment pas top et je suis sur qu'il y a moyen de faire mieux...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Bizarre, j'ai jamais vu ça... il y a combien d'items dans ta table ?

    Est-ce que tu as essayé de désactiver l'auto-complete pour voir si c'est lié à ça ?

    Comment est implémenté l'accès aux données ? ADO.NET ? Linq to SQL ? EF ? Si c'est du Linq, attention : l'exécution est différée. Si tu écris une requête Linq, elle n'est exécutée que quand tu commences à parcourir les résultats (sauf si tu utilises ToList ou ToArray, par exemple). Donc en fait, selon ton implémentation, c'est possible que la récupération effective des données ne se fasse que quand tu bindes la DataSource du combo...

  3. #3
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Il y a environ 70.000 enregistrements.
    J'utilise ADO.NET avec une requête des plus simple genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select NumInterne, Libelle from table
    Je vais essayer d'enlever l'auto-complete pour voir si ca change quelque chose...

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Il y a environ 70.000 enregistrements
    En même temps, à quoi ca sert d'en afficher autant? Qui lit 70k enregistrement?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Il y a environ 70.000 enregistrements.
    J'utilise ADO.NET avec une requête des plus simple genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select NumInterne, Libelle from table
    Je vais essayer d'enlever l'auto-complete pour voir si ca change quelque chose...
    70000 ça fait beaucoup quand même... surtout qu'il n'y a pas de virtualisation dans un ComboBox (contrairement au DataGridView par exemple)

    Citation Envoyé par PitMaverick78 Voir le message
    En même temps, à quoi ca sert d'en afficher autant? Qui lit 70k enregistrement?
    Personne, apparemment le but est de compléter automatiquement la saisie de l'utilisateur.

    D'ailleurs, si c'est juste pour l'autocomplete, tu peux pas utiliser une TextBox avec AutoCompleteSource = CustomSource à la place ?

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Personne, apparemment le but est de compléter automatiquement la saisie de l'utilisateur.
    Ca m'apprendra à lire en diagonale

  7. #7
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    En fait la demande du programme était simple, refaire texto une application Acces en VB.NET pour améliorer la vitesse de chargement (l'accès avec ce nombre d'enregistrement mettait plus ou moins deux minutes à afficher la fenêtre d'encodage) et pouvoir encoder et rechercher sur plusieurs postes en même temps.

    Mon but premier, comme demandé, était de reproduire le programme à l'identique pour ne pas troubler les utilisateurs.

    Maintenant il est vrais que je pourrais leurs demander si la combobox est vraiment utile vu que le système de recherche leurs permet de toute façon de retrouver ces informations.
    Bonne idée, car je ne pense pas qu'il y ai moyen d'améliorer la liaison autrement vu le nombre d'éléments et ce qui prime, c'est l'auto-complétion.

    Merci à vous deux pour votre intervention

  8. #8
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut listbox,combox ,affichage
    bonjour,
    mets :
    -comboxbox.visible=false
    c'est une des sources de lenteur,pour chaque element rapatrie,il y a un appel à la peinture du control(evenement paint).
    reactive la visibilite du controle.
    un exemple spectaculaire,parmi d'autres c'est les gens qui envoie une table dans un feuille ,le temps pris peut depasser 40 secondes pour 2000 lignes.
    alors qu'il suffit de mettre screenupdate=fasle(equivalent de visible dans excel).

    bon code....

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    -comboxbox.visible=false
    C'est une idée à explorer... cela dit, je ne suis pas sûr que ça aura un effet, vu qu'a priori le combo n'est pas déroulé pendant le remplissage, donc ajouter des items ne devrait pas déclencher le paint (ou alors c'est mal conçu, ce qui n'est pas à exclure)

  10. #10
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    J'ai décidé de faire vite fait un code pour tester tout ca...
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
        Dim con As New Data.SqlServerCe.SqlCeConnection(My.Settings.testReaderConnectionString)
                con.Open()
                Dim dc As New SqlServerCe.SqlCeCommand
                dc.Connection = con
                dc.CommandText = "delete from personne"
                dc.ExecuteNonQuery()
     
                dc.CommandText = "insert into personne values(?,?)"
                dc.Parameters.Add("id", SqlDbType.BigInt)
                dc.Parameters.Add("nom", SqlDbType.NVarChar)
     
                For i As Integer = 0 To 30000
                    dc.Parameters("id").Value = i
                    dc.Parameters("nom").Value = i
                    dc.ExecuteNonQuery()
                Next
     
                Dim dt As New DataTable
                Dim da As New SqlServerCe.SqlCeDataAdapter("select * from personne", con)
                da.Fill(dt)
                ' MsgBox("1")
                Dim t1 As Date = Now
                DataGridView1.DataSource = dt
                ' MsgBox("2")
                Dim t2 As Date = Now
                Dim total As TimeSpan = t2.Subtract(t1)
                MsgBox(total.ToString) ' 0,17 seconde 
     
                t1 = Now
                ComboBox1.Visible = False
                ComboBox1.DataSource = dt
                ComboBox1.ValueMember = "id"
                ComboBox1.DisplayMember = "nom"
                t2 = Now
     
                total = t2.Subtract(t1)
                MsgBox(total.ToString) ' 13 secondes
    On peux donc voir que pour 30000 éléments,
    le datagrid prend 0,17 seconde
    le combobox prend 13 secondes
    J'ai essayé de mettre .visible = false mais cela ne change malheureusement rien.

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    J'ai décidé de faire vite fait un code pour tester tout ca...
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
        Dim con As New Data.SqlServerCe.SqlCeConnection(My.Settings.testReaderConnectionString)
                con.Open()
                Dim dc As New SqlServerCe.SqlCeCommand
                dc.Connection = con
                dc.CommandText = "delete from personne"
                dc.ExecuteNonQuery()
     
                dc.CommandText = "insert into personne values(?,?)"
                dc.Parameters.Add("id", SqlDbType.BigInt)
                dc.Parameters.Add("nom", SqlDbType.NVarChar)
     
                For i As Integer = 0 To 30000
                    dc.Parameters("id").Value = i
                    dc.Parameters("nom").Value = i
                    dc.ExecuteNonQuery()
                Next
     
                Dim dt As New DataTable
                Dim da As New SqlServerCe.SqlCeDataAdapter("select * from personne", con)
                da.Fill(dt)
                ' MsgBox("1")
                Dim t1 As Date = Now
                DataGridView1.DataSource = dt
                ' MsgBox("2")
                Dim t2 As Date = Now
                Dim total As TimeSpan = t2.Subtract(t1)
                MsgBox(total.ToString) ' 0,17 seconde 
     
                t1 = Now
                ComboBox1.Visible = False
                ComboBox1.DataSource = dt
                ComboBox1.ValueMember = "id"
                ComboBox1.DisplayMember = "nom"
                t2 = Now
     
                total = t2.Subtract(t1)
                MsgBox(total.ToString) ' 13 secondes
    On peux donc voir que pour 30000 éléments,
    le datagrid prend 0,17 seconde
    le combobox prend 13 secondes
    J'ai essayé de mettre .visible = false mais cela ne change malheureusement rien.
    C'est du WPF ou Winform? Sur du wpf il doit être possible de virtualiser ca, sur winform aussi d'ailleurs mais moins facilement

    (Au fait, plutot que de t'embeter avec des DateTime et des Timespan pour chronometrer, utilise Stopwatch )

  12. #12
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    C'est du WinForm.
    J'essayerai à l'occase StopWatch...

    J'ai essayer de faire un textBox en auto-complete mais sans succès.
    A la suite du code j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Dim acsc As New AutoCompleteStringCollection
                For Each row As DataRow In dt.Rows
                    acsc.Add(row("nom"))
                Next
     
                TextBox1.AutoCompleteCustomSource = acsc
                TextBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend
    C'est très rapide, mais lors de la saisie dans le textBox rien ne se passe, aucune auto-completition
    j'ai pourtant été regardé des articles sur le net :
    http://www.codeproject.com/KB/vb/SQL...pleteList.aspx
    MSDN - AutoCompleteSource
    Je ne comprend pas pourquoi ca ne passe pas, ai-je oublié quelque chose ?

    EDIT : Je pense avoir oublié AutoCompleteSource = customsource tout simplement fatigue

  13. #13
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Donc j'ai testé avec
    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
     
                Dim sw As New Stopwatch
                sw.Start()
                'TextBox1.DataBindings.Add(New Binding("nom", dt, "id"))
                Dim acsc As New AutoCompleteStringCollection
                For Each row As DataRow In dt.Rows
                    acsc.Add(row("nom"))
                Next
     
                TextBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend
                TextBox1.AutoCompleteSource = AutoCompleteSource.CustomSource
                TextBox1.AutoCompleteCustomSource = acsc
     
                sw.Stop()
     
                MsgBox(sw.Elapsed.ToString)
    Et c'est beaucoup mieux que le comboBox, il prend seulement 0.09 seconde pour parser la table en collection et la lier.
    De plus avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend
    il a le même comportement que le combobox, à un détail prêt, je ne peux pas mettre l'id en ValueMember mais vu que celui-ci est unique pour la chaine dans ce cas, je n'ai aucun mal à retrouvé l'identifiant par après.

    Merci donc à vous tous, une fois de plus, pour vos interventions qui m'ont permis de résoudre ce problème

  14. #14
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    il a le même comportement que le combobox, à un détail prêt, je ne peux pas mettre l'id en ValueMember mais vu que celui-ci est unique pour la chaine dans ce cas, je n'ai aucun mal à retrouvé l'identifiant par après.
    Il n'empêche que de pousser la réflexion sur ce point n'est à mon avis pas inutile du tout.

    Concernant les combobox avec un trop gros nombre de choix dans la liste on ne le rappellera jamais assez sur ce forum!

    Si ca dépasse les 200 enregistrements il doit avoir un evenement qui se lance de votre cervelle afin de vous dire qu'il faut faire autrement

  15. #15
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par sinople Voir le message
    Si ca dépasse les 200 enregistrements il doit avoir un evenement qui se lance de votre cervelle afin de vous dire qu'il faut faire autrement
    Pas si c'est pour faire de l'auto-compétition...
    Voir :

    Citation Envoyé par PitMaverick78 Voir le message
    Citation Envoyé par tomlev Voir le message
    Personne, apparemment le but est de compléter automatiquement la saisie de l'utilisateur.
    Ca m'apprendra à lire en diagonale
    Et a savoir que si on auto-complète, avoir une liste qui propose des résultats suite à l'auto-compétition est toujours bien, le meilleur exemple est google...
    Je ne vois pas d'autre moyen de proposer un résultat à l'utilisateur suivant ce qu'il tape... (si tu as une idée je suis preneur bien sûr )

  16. #16
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Pas si c'est pour faire de l'auto-compétition...
    Voir :



    Et a savoir que si on auto-complète, avoir une liste qui propose des résultats suite à l'auto-compétition est toujours bien, le meilleur exemple est google...
    Je ne vois pas d'autre moyen de proposer un résultat à l'utilisateur suivant ce qu'il tape... (si tu as une idée je suis preneur bien sûr )
    A la différence que dans google t'as une requête vers le serveur à chaque lettre tapée et qu'il effectue un TOP avant de renvoyer
    Encore heureux qu'il charge pas tout ce qu'il a dans ses index sur ton poste

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    auto-compétition
    Euh... l'auto-compétition, c'est quand tu es en compétition avec toi-même ?

    Citation Envoyé par PitMaverick78 Voir le message
    A la différence que dans google t'as une requête vers le serveur à chaque lettre tapée et qu'il effectue un TOP avant de renvoyer
    Oui, d'ailleurs c'est dommage qu'il ne soit pas possible de faire quelque chose comme ça avec l'auto-complete de TextBox... La "CustomSource" n'est pas si custom que ça, vu que la source doit forcément être une AutoCompleteStringCollection, dont les méthodes ne sont pas virtuelles... donc pas moyen de bidouiller avec.

  18. #18
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Euh... l'auto-compétition, c'est quand tu es en compétition avec toi-même ?



    Oui, d'ailleurs c'est dommage qu'il ne soit pas possible de faire quelque chose comme ça avec l'auto-complete de TextBox... La "CustomSource" n'est pas si custom que ça, vu que la source doit forcément être une AutoCompleteStringCollection, dont les méthodes ne sont pas virtuelles... donc pas moyen de bidouiller avec.
    Et en se branchant sur TextChanged pour changer la customsource ?

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Et en se branchant sur TextChanged pour changer la customsource ?
    ouais, enfin ce serait vraiment du bricolage... ils auraient mieux fait de faire une interface AutoCompleteProvider, ou un truc dans ce goût là, ça aurait beaucoup plus souple

  20. #20
    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 : 42
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Et en se branchant sur TextChanged pour changer la customsource ?
    C'est ce que j'ai fait quand le combobox mettait autant de temps...

    Citation Envoyé par Sankasssss Voir le message
    Pour cette application j'avais bidouillé un système sur les évènements keyDown et keyUp afin de n'activer la liaison que quand l'utilisateur tape 3 lettres avec un like sur la bd (moins de données à lier, donc plus rapide).
    Ca fonctionne mais le code n'est vraiment pas top et je suis sur qu'il y a moyen de faire mieux...
    Mais comme je l'ai dit c'est pas top, vraiment du chipotage...
    Le textBox est vraiment plus simple, même si il doit rapatrier tout les résultats, c'est très rapide en auto-complétion...

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

Discussions similaires

  1. [2008R2] script qui prend beaucoup de temps
    Par my_diva dans le forum Développement
    Réponses: 7
    Dernier message: 20/01/2014, 17h48
  2. Extraction qui prend beaucoup de temps
    Par khadija30 dans le forum SSIS
    Réponses: 14
    Dernier message: 14/05/2013, 17h12
  3. Fermeture de StreamReader prend beaucoup de temps?
    Par Lebbihi dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/08/2009, 23h57
  4. Réponses: 7
    Dernier message: 10/03/2009, 19h02
  5. do while prend beaucoup de temps
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/07/2008, 22h58

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