2009-10-29 4 views
0

J'ai une zone de liste où les éléments sont chargés à partir de la base de données, lorsque l'utilisateur tape quelque chose dans la zone de texte, la boîte de liste doit rechercher les caractères de départ et l'afficher dans la zone de texte.?Rechercher une zone de liste en tapant une zone de texte dans Winforms C#

Par exemple:

Dès que les types d'utilisateurs « A » dans le texte-case, tous les enregistrements à partir de « A » doivent être affichées en boîte.
Lorsque l'utilisateur sélectionne l'enregistrement et appuie sur Entrée, cet enregistrement doit être entré dans la zone de texte.
Et aussi lorsque l'utilisateur clique sur l'enregistrement de la souris, cet enregistrement doit être entré dans la zone de texte.

Je ne veux pas utiliser le mode complet d'auto-zone de texte

Comment faire cela en C#?

Merci à l'avance

+0

C'est exactement ce à quoi sert un auto-complet. Y a-t-il une raison pour laquelle vous ne * PAS * utiliser l'auto-complétion? – abhilash

+0

@AB Kolan: AFAIK 'ListBox' ne supporte aucun type de saisie semi-automatique ... Pouvez-vous suggérer un autre contrôle ou une autre approche? – jheddings

Répondre

1

Une zone de liste lui-même ne prend pas en charge ce genre de comportement de filtrage de la boîte. Le mieux est de faire le filtrage vous-même, chaque fois que le texte change dans la zone de texte, effectuez une recherche sur la source de données et insérez les résultats dans la liste. Tant que votre source de données (les éléments dans la base de données dans ce cas) n'est pas gigantesque, vous pouvez vous en sortir en mettant en cache tous les éléments et en effectuant une recherche en mémoire. Au démarrage, récupérez tous les éléments et utilisez la liste en mémoire pour les recherches. La puissance de traitement n'est pas un problème de nos jours, mais tout dépend de votre situation actuelle. Je ne sais pas quelle est la taille de votre source de données en ce qui concerne votre architecture/infrastructure, mais effectuer chaque recherche "incrémentielle" par rapport à la base de données n'est probablement pas l'option la plus rapide. Et la vitesse est cruciale avec ce type de mécanisme de filtrage.

Si la liste en mémoire, ou aller à la base de données chaque fois, ne sont pas possibles/faisables, Lucene.NET pourrait être l'option la plus performante. Lucene.NET a été créé pour créer des index de données et effectuer des recherches super rapide contre ces index. L'inconvénient est que vous devrez créer un index de vos données et le tenir à jour lorsque votre source de données change, l'avantage est incroyablement rapide. (Sans blague :)

Lien vers Lucene.NET: http://incubator.apache.org/projects/lucene.net.html

1
int index = listbox.FindString(textbox.Text); 
if (0 <= index) 
{ 
    listbox.SelectedIndex = index; 
} 

EDIT: meh, sur la base a répondu question de titre qui, malheureusement, est tout à fait autonome en opposition à la question réelle. Veuillez ignorer ...

Questions connexes