Je suis en train de créer une application de formulaire simple avec un dataGrid, un TextBox. J'ai environ 10K enregistrements de noms. Ce que je veux faire est d'implémenter une sorte de fonction d'achèvement automatique de sorte que lorsqu'un utilisateur tape dans la zone de texte, la grille de données est mise à jour pour afficher les correspondances en conséquence.Zone de texte Auto-complétée - Winform + LINQ
Juste pour tester ceci, j'ai un objet DataContext qui retourne les noms table et je mets un peu de code en cas textBox1_TextChanged pour réinitialiser la source de données avec
this.dataGrid1.DataSource = (from p in connectionWrapper.getConnectionObj.PatientsNormalizeds where p.Name.Contains(textBox1.Text) select p).Take(30);
Cela fonctionne bien sur une connexion locale mais lorsque vous extrayez des données d'un serveur SQL distant, ceci est bien sûr trop lent, le typage devient lent et inacceptable pour les utilisateurs.
Je me demandais simplement si quelque chose pouvait être fait sans changer la conception. Je peux bien sûr charger la table entière dans une liste ou DataTable à form_loading et exécuter la recherche contre elle mais cela fera cesser le répondeur pendant 3 secondes environ ...
Ceci est probablement très simple pour la plupart des développeurs mais Je suis très nouveau.
Merci!
En fait, vous devez d'abord sélectionner TOUS les noms contenant l'entrée de l'utilisateur dans le DB, et seulement après cela, vous prenez les 30 premiers résultats. Mais votre base de données a été totalement traitée! Vous devriez arrêter votre requête juste après que les 30 premiers résultats aient été trouvés. Je ne connais pas assez bien LINQ ou SQL pour répondre, mais la solution devrait être facile si vous le faites. –
est p une chaîne ou est-il peupler un objet? Parfois, si vous renvoyez un certain nombre d'objets, cela ralentira considérablement votre temps de chargement car il doit remplir chaque objet. – Gage
Il s'agit d'un objet mais rien de fantaisie, juste nom, dob, téléphone # etc etc – Rillanon