2008-11-24 3 views
4

J'essaie d'utiliser une requête Linq pour trouver et définir la valeur sélectionnée dans un contrôle de liste déroulante.Sélectionnez un ListItem de DropDownList en utilisant une requête Linq

Dim qry = From i In ddlOutcome.Items _ 
      Where i.Text.Contains(value) 


Dim selectedItem As ListItem = qry.First 

ddlOutcome.SelectedValue = selectedItem.Value 

Même si la documentation indique que la collection DropDownList.Items implémente IEnumerable je reçois une erreur dans la clause Where que l'option stricte ON liaison tardive interdit!

Répondre

2

Merci pour la suggestions, ils ont tous deux été utiles pour me conduire à une solution réalisable. Bien que je sois d'accord que l'utilisation des méthodes de la liste déroulante elle-même devrait être la voie à suivre, je n'ai pas de correspondance exacte sur le texte des éléments de la liste, donc j'avais besoin d'un autre moyen. La requête linq semble préférable à l'itération à travers la liste moi-même, et j'ai appris quelque chose dans le processus.

+0

J'ai raison d'utiliser FirstOrDefault dans ces situations pour éviter les problèmes en aval. Vérifiez null! – Allen

+0

une autre réponse pour référence, il semble que «Selected» est la même signification que «Checked» https://stackoverflow.com/questions/18924147/how-to-get-values-of-selected-items-in-checkboxlist-with- foreach-in-asp-net-c –

1

Mon vb.net est fragile, (C# gars) mais essayez:

Dim qry = From DirectCast(i, ListItem) In ddlOutcome.Items ... 

je peut avoir la syntaxe DirectCast mal, mais vous savez où je veux en venir. Le problème est qu'à la compilation, Items n'est pas vérifiable comme une collection de ListItem car la propriété Current de IEnumerable retourne Object. Les éléments ne sont pas une collection générique.

-Oisin

8

Je peux vous donner une réponse en C#, et je vous aide qu'il espère.

La meilleure façon à utiliser les méthodes de DROPDOWNLIST, mieux que la requête LINQ:

DropDownList1.SelectedIndex = 
     DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("2")); 

Si vous souhaitez que la requête LINQ ce serait comme ceci:

var selected=from i in DropDownList1.Items.Cast<ListItem>() 
        where ((ListItem)i).Text.Contains("2") select i; 

DropDownList1.SelectedValue = selected.ToList()[0].Text; 
0

façon simple de sélectionner en utilisant le code suivant

foreach (ListItem i in DropDownList1.Items) 
    { 
     DropDownList1.SelectedValue = i.Value; 
    if (DropDownList1.SelectedItem.Text=="text of your DropDownList") 
     { 
     break; 
     } 
    } 
5

Quelqu'un a pensé à:

foreach (ListItem li in drp.Items.Cast<ListItem>().Where(li => li.Value == "")) 
{ 
    li.Selected = true; 
} 
+0

Excellent! C'est exactement ce à quoi je pensais! – dotnetN00b

Questions connexes