Как выбрать элемент раскрывающегося списка по значению программно

Как выбрать элемент выпадающего списка по значению программно в C#.NET?

10 ответов

Решение

Если вы знаете, что раскрывающийся список содержит значение, которое вы хотите выбрать, используйте:

ddl.SelectedValue = "2";

Если вы не уверены, существует ли значение, используйте (или вы получите исключение нулевой ссылки):

ListItem selectedListItem = ddl.Items.FindByValue("2");

if (selectedListItem != null)
{
    selectedListItem.Selected = true;
}

Пожалуйста, попробуйте ниже:

myDropDown.SelectedIndex = 
myDropDown.Items.IndexOf(myDropDown.Items.FindByValue("myValue"))
ddl.SetSelectedValue("2");

С удобным расширением:

public static class WebExtensions
{

    /// <summary>
    /// Selects the item in the list control that contains the specified value, if it exists.
    /// </summary>
    /// <param name="dropDownList"></param>
    /// <param name="selectedValue">The value of the item in the list control to select</param>
    /// <returns>Returns true if the value exists in the list control, false otherwise</returns>
    public static Boolean SetSelectedValue(this DropDownList dropDownList, String selectedValue)
    {
        ListItem selectedListItem = dropDownList.Items.FindByValue(selectedValue);

        if (selectedListItem != null)
        {
            selectedListItem.Selected = true;
            return true;
        }
        else
            return false;
    }
}

Примечание. Любой код публикуется в открытом доступе. Атрибуция не требуется.

Это простой способ выбрать опцию из выпадающего списка на основе строки val

private void SetDDLs(DropDownList d,string val)
    {
        ListItem li;
        for (int i = 0; i < d.Items.Count; i++)
        {
            li = d.Items[i];
            if (li.Value == val)
            {
                d.SelectedIndex = i;
                break;
            }
        }
    }

ddlPageSize.Items.FindByValue("25").Selected = true;

У Иана Бойда (выше) был отличный ответ - добавьте это в класс Иэна Бойда "WebExtensions", чтобы выбрать элемент в раскрывающемся списке на основе текста:

    /// <summary>
    /// Selects the item in the list control that contains the specified text, if it exists.
    /// </summary>
    /// <param name="dropDownList"></param>
    /// <param name="selectedText">The text of the item in the list control to select</param>
    /// <returns>Returns true if the value exists in the list control, false otherwise</returns>
    public static Boolean SetSelectedText(this DropDownList dropDownList, String selectedText)
    {
        ListItem selectedListItem = dropDownList.Items.FindByText(selectedText);

        if (selectedListItem != null)
        {
            selectedListItem.Selected = true;
            return true;
        }
        else
            return false;
    }

Чтобы назвать это:

WebExtensions.SetSelectedText(MyDropDownList, "MyValue");

Если кто-то еще пытается это сделать и сталкивается с проблемой, позвольте мне указать на одну возможную проблему: если вы используете веб-приложение, то внутри Page_Load, если вы загружаете раскрывающийся список из БД и в то же время вы хотите загрузить данные, тогда сначала загрузите свое падение списки, а затем загрузите данные с выбранными условиями раскрывающегося списка.

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        LoadDropdown(); //drop-downs generated first
        LoadData(); // other data loading and drop-down value selection logic here
    }
}

И для успешного выбора раскрывающегося списка из кода следуйте утвержденному ответу выше, который

ddl.SelectedValue = "2";.

Надеюсь, это решит проблему

combobox1.SelectedValue = x;

Я подозреваю, что вы можете услышать что-то еще, но это то, что вы просили.

Я предпочитаю

if(ddl.Items.FindByValue(string) != null)
{
    ddl.Items.FindByValue(string).Selected = true;
}

Замените ddl идентификатором выпадающего списка, а строку - именем или значением строковой переменной.

Для тех, кто приходит сюда по поиску (потому что этой теме более 3 лет):

string entry // replace with search value

if (comboBox.Items.Contains(entry))
   comboBox.SelectedIndex = comboBox.Items.IndexOf(entry);
else
   comboBox.SelectedIndex = 0;
Другие вопросы по тегам