L'utilisation de Linq pour filtrer une liste déroulante.Source de données?
dans un autre sujet, je suis tombé sur cette très élégante solution par Darin Dimitrov pour filtrer la source de données d'une zone de liste déroulante avec la sélection d'une autre zone de liste déroulante:
comment filtrer zone de liste déroulante dans la zone de liste déroulante à l'aide de c#
combo2.DataSource = ((IEnumerable<string>)c.DataSource)
.Where(x => x == (string)combo1.SelectedValue);
Je voudrais faire quelque chose de similaire, mais intead de filtrage par une deuxième zone de liste déroulante, je tiens à filtrer par le texte d'une zone de texte. (En gros, au lieu de choisir à partir d'une deuxième zone de liste déroulante, l'utilisateur doit simplement entrer son filtre dans une zone de texte). Cependant, il s'est avéré être pas aussi simple que je l'avais espéré qu'il serait. J'ai essayé plein de trucs, comme les suivantes, mais a échoué lamentablement:
cbWohndresse.DataSource = ((IEnumerable<DataSet>)ds)
.Where(x => x.Tables["Adresse"].Select("AdrLabel LIKE '%TEST%'"));
cbWohndresse.DisplayMember = "Adresse.AdrLabel";
cbWohndresse.ValueMember = "Adresse.adress_id";
ds est le DataSet que je voudrais utiliser comme source de données filtré.
"Adresse" est un DataTable de ce jeu de données. Il contient un DataColumn "AdrLabel". Maintenant, je voudrais n'afficher que les "AdrLabel", qui contiennent la chaîne de caractères à partir de la saisie de l'utilisateur. (Actuellement, %TEST% remplace la zone de texte.texte.)
Le code ci-dessus échoue parce que l'expression lambda n'a pas de retour Bool. Mais je suis sûr, il y a aussi d'autres problèmes (qui dois-je utiliser pour IEnumerable? Maintenant, c'est DataSet, mais Darin utilisé Chaîne. Mais comment pouvais-je convertir un jeu de données dans une chaîne de caractères?
Oui, je suis comme beaucoup newbyish qu'il arrive, mon expérience est "vide", et publiquement. Donc, s'il vous plaît pardonnez-moi plutôt des questions stupides.
Votre aide est grandement appréciée, parce que je ne peux pas résoudre cela sur mon propre (déjà essayé).
Merci beaucoup!
Pesche
P. S. je ne suis qu'à l'aide de Linq pour parvenir à un simple filtre pour la zone de liste déroulante (en évitant de Vue). Le reste n'est pas basé sur Linq, mais sur oldstyle Ado.NET (ds est rempli par un SqlDataAdapter), si c'est de toute importance.
OriginalL'auteur Pesche Helfer | 2010-03-21
Vous devez vous connecter pour publier un commentaire.
LINQ ne semble pas, pour moi, comme une solution évidente ici. Vos données sont déjà chargés dans un
DataSet
de la structure, de sorte que vous devriez être en mesure de faire quelque chose comme ceci:À l'adresse de la réalité des problèmes dans votre code actuel:
ds
est de typeDataSet
, moulageIEnumerable<DataSet>
échouera.DataTable.Select
retourne un tableau de lignes, pas un booléen.Where()
appel serait de retour à zéro, un ou plusieursDataSet
instances qui ont chacun une table nommée "Adresse" avec au moins une ligne correspondant au filtre. Donc, vous finissez par la liaison de votre présentation, le contrôle d'un ensemble deDataSet
cas, ce qui est pas ce dont vous avez besoin.OriginalL'auteur Jørn Schou-Rode
Si vous souhaitez utiliser LINQ, alors vous aurez besoin d'ajouter une référence
System.Data.DataSetExtensions
. Ensuite, vous pouvez interroger votre base de données dans un "linqish".Le blog L'interrogation des ensembles de données – Introduction à LINQ to DataSet par Erick Thompson, un PM de Microsoft est une bonne introduction à LINQ to jeux de données
Voici un exemple brut:
XAML
Code Derrière
De revenir, de visite, de contribuer 🙂 assurez-vous à "accepter" les réponses à vos question(s). Et Bienvenue!
Euh, puis-je accepter les deux réponses? La coche verte s'seulement s'en tenir à une réponse ...
Une seule réponse peut être acceptée. Vous n'aurez pas de mal à personne la sensation de ne pas choisis comme une réponse. Juste être sûr de choisis la réponse qui a fonctionné pour vous. 🙂
Eh bien, c'est dommage, car les deux réponses sont grands et de travail. Je viens de vous donner un virtuel pouce vers le haut, puis 🙂
OriginalL'auteur Metro Smurf