2012-02-08 134 views
9

我想在下拉写有VB.NET名单在ASP.NET中选择一个项目 - 我在列表框的值和文本是这样的:选择下拉列表项目findbytext不区分大小写vb.net

 
Volvo 
Audi 
etc... 

但在上情况下,从其他地方来的值... VOLVO,奥迪..

此代码:

dropdownlist.FindByValue("CAPITAL") 

不能正常工作,并给予null沃尔沃..请帮助。

+0

没有原生的方法..你必须自己写。 Tim的答案就是一个很好的例子。 – 2012-02-08 14:51:12

回答

14

一种方法是LINQ:

Dim volvoItem = dropdownlist.Items.Cast(Of ListItem)(). 
    FirstOrDefault(Function(i) i.Text.Equals("Volvo", StringComparison.InvariantCultureIgnoreCase)) 

C#:

var volvoItem = dropdownlist.Items.Cast<ListItem>() 
    .FirstOrDefault(i => i.Text.Equals("Volvo", StringComparison.InvariantCultureIgnoreCase)); 
+0

谢谢.. :) – 2012-02-08 15:00:54

1

就像蒂姆说LINQ将是你回答这个工作对我来说

foreach(ListItem li in dropdownlist.Items) 
    { 
     if (String.Compare(li.Text, myLabel.Text, true) == 0) 
      myCustomValidator.IsValid = false; // Match Found ! 
    } 
+0

如果你处理很多物品,效率不高。如果您需要改进性能和内存使用情况,那么搜索将是您更好的选择。但要改进你的解决方案。找到该项目后,退出for循环 – 2016-06-08 05:18:15

0


在C#中尝试以下操作:

var item = dropdownlist.Items.Cast<ListItem>().SingleOrDefault(li => 
               li.Text.ToUpper() == "VOLVO"); 
0

其他变种,采用框架CI比较。 VB:

uiList.Items.Cast(Of ListItem) 
    .FirstOrDefault(Function(i) i.Text.Equals(comparand, StringComparison.InvariantCultureIgnoreCase)) 

C#:

uiList.Items.Cast<ListItem>() 
    .FirstOrDefault(i => i.Text.Equals(comparand, StringComparison.InvariantCultureIgnoreCase)); 

你也可以根据您的要求使用CurrentCultureIgnoreCase。这些通常比ToUpper/ToLower更安全,因为一些文化具有意想不到的套管规则。