2008-11-24 2 views
4

Я пытаюсь использовать запрос Linq для поиска и установки выбранного значения в выпадающем списке.Выберите ListItem из DropDownList, используя запрос Linq

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


Dim selectedItem As ListItem = qry.First 

ddlOutcome.SelectedValue = selectedItem.Value 

Даже если документация говорит, что коллекция DropDownList.Items реализует IEnumerable я получаю сообщение об ошибке в тех случаях, когда оговорка, что Option Strict ON запрещает позднее связывание!

ответ

2

Спасибо за предложения, они были полезны для того, чтобы привести меня к работоспособному решению. Хотя я согласен с тем, что использование методов самого списка перетаскивания должно быть способом, у меня нет точного соответствия тексту элементов в списке, поэтому мне нужен был другой способ.

Линейный запрос представляется предпочтительным для повторения самого списка, и я узнал что-то в этом процессе.

+0

У меня есть основания использовать FirstOrDefault в таких ситуациях, чтобы избежать проблем вниз по течению. Проверьте наличие null! – Allen 2015-10-31 10:43:05

+0

другой ответ для справки, кажется `Selected` - это то же значение, что и` Checked` https://stackoverflow.com/questions/18924147/how-to-get-values-of-selected-items-in-checkboxlist-with- foreach-in-asp-net-c – 2017-06-13 15:52:53

1

Мой vb.net сомнительна, (с # парень), но попробовать:

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

я могу иметь синтаксис DirectCast неправильно, но вы знаете, где я откуда. Проблема в том, что во время компиляции элементы не проверяются как коллекция ListItem, поскольку текущее свойство IEnumerable возвращает Object. Элементы не являются общей коллекцией.

-Oisin

8

Я могу дать вам ответ в C#, и я надеюсь, что это поможет вам.

Самый простой способ это использовать методы DROPDOWNLIST, лучше, чем Linq запрос:

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

Если вы хотите, чтобы запрос Linq было бы так:

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

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

простой способ выбрать, используя следующий код

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

Любой думал о:

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