【发布时间】:2011-01-30 02:12:55
【问题描述】:
在另一个主题中,我偶然发现了 Darin Dimitrov 这个非常优雅的解决方案,通过选择另一个 ComboBox 来过滤一个 ComboBox 的 DataSource: how to filter combobox in combobox using c#
combo2.DataSource = ((IEnumerable<string>)c.DataSource)
.Where(x => x == (string)combo1.SelectedValue);
我想做类似的事情,但不是通过第二个组合框过滤,我想通过文本框的文本进行过滤。 (基本上,用户无需从第二个 ComboBox 中进行选择,只需将他的过滤器输入到 TextBox 中)。然而,事实证明它并不像我希望的那样直截了当。我尝试了以下内容,但失败了:
cbWohndresse.DataSource = ((IEnumerable<DataSet>)ds)
.Where(x => x.Tables["Adresse"].Select("AdrLabel LIKE '%TEST%'"));
cbWohndresse.DisplayMember = "Adresse.AdrLabel";
cbWohndresse.ValueMember = "Adresse.adress_id";
ds 是我想用作过滤数据源的 DataSet。 "Adresse" 是这个DataSet 中的一个DataTable。它包含一个 DataColumn "AdrLabel"。现在我只想显示那些“AdrLabel”,其中包含来自用户输入的字符串。 (目前,%TEST% 替换了 textbox.text。)
上面的代码失败是因为 lambda 表达式没有返回 Bool。但我敢肯定,还有其他问题(IEnumerable应该使用哪种类型?现在是DataSet,但是Darin使用了String。但是我怎样才能将DataSet转换为字符串呢?
是的,我是新人,我的经验是“无效的”,而且在公开场合也是如此。所以请原谅我的愚蠢问题。
非常感谢您的帮助,因为我自己无法解决这个问题(已经很努力了)。
非常感谢!
佩舍
附:我只是使用 Linq 为 ComboBox 实现一个简单的过滤器(避免视图)。其余的不是基于 Linq,而是基于老式 Ado.NET(ds 由 SqlDataAdapter 填充),如果这很重要的话。
【问题讨论】:
标签: c# linq combobox dataset filter