C# dropdownlist项按部分值查找

C# dropdownlist项按部分值查找,c#,drop-down-menu,C#,Drop Down Menu,要使用值在dropdownlist中查找项目(并选择它),我们只需执行以下操作 dropdownlist1.Items.FindByValue("myValue").Selected = true; 如何使用部分值查找项目?假设我有3个元素,它们分别有值“myValue 1”、“myValue 2”、“myValue 3”。我想做一些像 dropdownlist1.Items.FindByValue("three").Selected = true; 然后让它选择最后一个项目。您可以迭代列表

要使用值在dropdownlist中查找项目(并选择它),我们只需执行以下操作

dropdownlist1.Items.FindByValue("myValue").Selected = true;
如何使用部分值查找项目?假设我有3个元素,它们分别有值“myValue 1”、“myValue 2”、“myValue 3”。我想做一些像

dropdownlist1.Items.FindByValue("three").Selected = true;

然后让它选择最后一个项目。

您可以迭代列表中的项目,当您找到第一个项目的字符串包含模式时,您可以将其Selected属性设置为true

bool found = false;
int i = 0;
while (!found && i<dropdownlist1.Items.Count)
{
       if (dropdownlist1.Items.ToString().Contains("three"))
              found = true;
       else
              i++;
}
if(found)
     dropdownlist1.Items[i].Selected = true;

您可以从列表的末尾进行迭代,并检查值是否包含该项(这将选择最后一个包含值“myValueSearched”的项)

或者您可以一如既往地使用linq:

DropDownList1.Items.Cast<ListItem>()
                   .Where(x => x.Value.Contains("three"))
                   .LastOrDefault().Selected = true;
DropDownList1.Items.Cast()
其中(x=>x.Value.Contains(“三”))
.LastOrDefault().Selected=true;

上述答案非常完美,只是没有区分大小写的证明:

DDL.SelectedValue = DDL.Items.Cast<ListItem>().FirstOrDefault(x => x.Text.ToLower().Contains(matchingItem)).Text
DDL.SelectedValue=DDL.Items.Cast().FirstOrDefault(x=>x.Text.ToLower().Contains(matchingItem)).Text

在哪里可以找到dropdownlist?或者“物品”是什么类型的收藏品?噢,我喜欢林克。谢谢。我的页面中有很多这样的下拉列表,比如说20个,每个下拉列表都必须循环3000条记录,才能找到与dataset列匹配的部分值。因此,通过这种方法,我想它会对性能产生很大影响。如果你有想法,请提出最好的方法
 for (int i = DropDownList1.Items.Count - 1; i >= 0 ; i--)
        {
            if (DropDownList1.Items[i].Value.Contains("myValueSearched"))
            {
                DropDownList1.Items[i].Selected = true;
                break;
            }
        }
DropDownList1.Items.Cast<ListItem>()
                   .Where(x => x.Value.Contains("three"))
                   .LastOrDefault().Selected = true;
DDL.SelectedValue = DDL.Items.Cast<ListItem>().FirstOrDefault(x => x.Text.ToLower().Contains(matchingItem)).Text