ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CodeGo.net>使用LINQ过滤ComboBox.DataSource?

2019-10-24 05:17:00  阅读:208  来源: 互联网

标签:dataset filter combobox linq c


在另一个主题中,我偶然发现了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);

我想做类似的事情,但是要通过第二个组合框进行过滤,我想按TextBox的文本进行过滤. (基本上,用户无需从第二个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是我想用作过滤数据源的数据集.
“地址”是此数据集中的一个数据表.它包含一个DataColumn“ AdrLabel”.现在,我只想显示那些“ AdrLabel”,其中包含来自用户输入的字符串. (当前,%TEST%替换了textbox.text.)

上面的代码失败,因为lambda表达式不返回Bool.但是我敢肯定,还有其他问题(IEnumerable应该使用哪种类型?现在是DataSet,但是Darin使用String.但是如何将DataSet转换为字符串?

是的,我的经验是无足轻重的,我的经历是“空洞的”,公开场合也是这样.因此,请原谅我一些愚蠢的问题.

非常感谢您的帮助,因为我无法独自解决此问题(已经尝试过).

非常感谢你!

佩舍

附言我仅使用Linq为ComboBox实现简单的过滤器(避免使用View).其余的不是基于Linq,而是基于旧式的Ado.NET(ds由SqlDataAdapter填充),如果这很重要的话.

解决方法:

在我看来,LINQ在这里似乎不是一个显而易见的解决方案.您的数据已经加载到DataSet结构中,因此您应该可以执行以下操作:

var adresse = ds.Tables["Adresse"];
adresse.DefaultView.RowFilter = "AdrLabel LIKE '%TEST%'";

cbWohndresse.DataSource = adresse;
cbWohndresse.DisplayMember = "AdrLabel";
cbWohndresse.ValueMember = "adress_id"
cbWohndresse.DataBind();

要解决当前代码中的实际问题:

>如果ds的类型为DataSet,则将其强制转换为IEnumerable< DataSet>.将失败.
> DataTable.Select返回一个行数组,而不是布尔值.
>忽略#1和#2,您的Where()调用将返回零,一个或多个DataSet实例,每个实例都有一个名为“ Adresse”的表,其中至少有一行与过滤器匹配.因此,最终您将表示控件绑定到一组DataSet实例上,而这并不是您所需要的.

标签:dataset,filter,combobox,linq,c
来源: https://codeday.me/bug/20191024/1918424.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有