如何通过编程方式搜索C#DropDownList

时间:2009-05-15 14:43:32

标签: c# search drop-down-menu

我很难弄清楚如何编写一系列“if”语句,这些语句通过不同的下拉列表搜索文本框中输入的特定值。我能够编写在每个下拉列表中找到特定值的代码;但是,在此之前,我需要添加一个“if”语句,“如果dropdownlist不包含特定值,请转到next if语句,依此类推”。以下是我到目前为止的一个例子:

if (dropdownlist1.SelectedValue == textbox1)
{
  dropdownlist1.SelectedIndex = dropdownlist1.items.indexof(dorpdownlist1.items.findbyvalue(textbox1.text) ...

if (dropdownlist2.SelectedValue == textbox1)
{
  dropdownlist2.SelectedIndex = dropdownlist2.items.indexof(dorpdownlist2.items.findbyvalue(textbox1.text) ...

etc...

这样做是基于textbox1中的条目读取或扫描每个下拉列表中的第一个值或索引。不幸的是,它只识别第一个值或索引。我需要弄清楚如何在每个“if”语句中扫描整个下拉列表中的所有值,以找到匹配的textbox1值。有没有人有任何建议?

谢谢,

DFM

9 个答案:

答案 0 :(得分:22)

foreach (ListItem li in dropdownlist1.Items)
{
    if (li.Value == textBox1.text)
    {
       // The value of the option matches the TextBox. Process stuff here.
    }
}

这是我建议如何查看该值是否在下拉列表中。

答案 1 :(得分:7)

DropDownList继承ItemsListControl集合。由于Items是一个数组,因此您可以使用以下语法:

dropdownlist1.Items.Contains(textbox1.Text)作为布尔值。

答案 2 :(得分:3)

你可以这样做。

if (ddl.Items.FindByValue("value") != null) {
   ddl.SelectedValue = "value";
};

答案 3 :(得分:2)

我会制作一个下拉框列表,然后使用linq选择它。

List<DropDownList> list = new List<DropDownList>();
list.Item.Add(dropdown1);
list.Item.Add(dropdown2); 
.... (etc)

var selected = from item in list.Cast<DropDownList>()
               where item.value == textBox1.text
               select item;

答案 4 :(得分:2)

如果您想要搜索确切的值,则可以使用解决方案 在装载的组合框中。

此解决方案也会搜索部分值。它使用搜索按钮 并将下拉框的文本部分作为搜索条件

Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click

    ' query the dropdown object
    ''''''''''''
    ' part 9457 is a "contains" sample
    ' part 111 is a "startswith" sample

    Dim query As IEnumerable(Of [Object]) = _
    From item In cboParts.Items _
    Where (item.ToString().ToUpper().StartsWith(cboParts.Text.ToUpper())) _
    Select (item)

    ' show seached item as selected item
    cboParts.SelectedItem = query.FirstOrDefault()

    ' "startswith" fails, so look for "contains" 
    If String.IsNullOrEmpty(cboParts.SelectedItem) Then

        Dim query1 As IEnumerable(Of [Object]) = _
        From item In cboParts.Items _
        Where (item.ToString().ToUpper().Contains(cboParts.Text.ToUpper())) _
        Select (item)

        ' show seached item as selected item
        cboParts.SelectedItem = query1.FirstOrDefault()

        If String.IsNullOrEmpty(cboParts.SelectedItem) Then
            MsgBox("Part is not in dropdown list")
        End If

    End If

答案 5 :(得分:1)

我试图在下拉列表中逐项查找。我使用下面的代码,它有效:)

ListItem _lstitemTemp = new ListItem("Text To Find In Dropdownlist");
if(_DropDownList.Items.Contains(_lstitemTemp))
{
    dosomething();
}

答案 6 :(得分:0)

一行代码 - 为了便于阅读而分开。

this.DropDownList1.SelectedItem = this.DropDownList1.Items
     .SingleOrDefault(ddli => ddli.value == this.textbox1.value);

答案 7 :(得分:0)

如果您不想使用LINQ:

        List<ComboBox> dropDowns = new List<ComboBox>();
        dropDowns.Add(comboBox1);
        dropDowns.Add(comboBox2);

        bool found = false;
        ComboBox foundInCombo = null;
        int foundIndex = -1;

        for (int i = 0; i < dropDowns.Count && found == false; i++)
        {
            for (int j = 0; j < dropDowns[i].Items.Count && found == false; j++)
            {
                if (item == textBox1.Text)
                {
                    found = true;
                    foundInCombo = dropDowns[i];
                    foundIndex = j;
                }
            }
        }

答案 8 :(得分:0)

while(dropdownlist1.SelectedIndex++ < dropdownlist1.Items.Count)
{
    if (dropdownlist1.SelectedValue == textBox1.text)
    {
      // Add your logic here.
    }
}

//resetting to 0th index(optional)
dropdownlist1.SelectedIndex = 0;