基于第二列中的值过滤组合框项目

问题描述:

我有一个Datatable(invTable),其中有19列,我通过csv文件创建。从那个Datatable中,我使用第2列(名称)中的值来填充组合框。基于第二列中的值过滤组合框项目

我需要做的是只有当列9(类型)中的值与预设值匹配时,才会过滤来自列2(名称)的组合框中的项目。即只有在列9(类型)中的值是15时才有效。

我还需要能够根据Combobox中选定的项目处理其余列中的值。将它们分配给像SelectedCol1-SelectedCol19这样的变量,以便它们可以在整个程序的其他计算中使用。

编辑: 我能用下面的代码找到符合我需要的东西。

var query = invTable.AsEnumerable().Where(c => c.Field<String>("Type").Equals("15")); 
combo1.DataSource = query.AsDataView(); 
combo1.DisplayMember = "name"; 
combo1.ValueMember = "Index"; 
+0

我想要做的事情(如果你还没有做的话)会将这个因素重新分解成一个方法。该方法将有两个参数,即字段名称(示例中为“类型”)和值(本例中为“15”)。 – 2011-02-08 18:01:05

我不打算试图在这里给你一个完整的解决方案,但我希望不要给你正确的方向。

基本上你需要使用一个数据视图(这是原始数据集的“过滤”的看法。所以哟要筛选每一次,您将创建一个数据视图分配给它的过滤标准。

http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx

上面的链接应该给你一个可行的解决方案。往岁的底部,他们也有例子。

一旦你有你的数据视图过滤你需要,你可以遍历它的行来填充下降的方式有问题

编辑为OP提供简单的步骤。

开始简单。我假设你知道如何填充组合框。

第一步:在DataSet 第二步获得数据:使用一个DataView 第三步筛选数据集:

DataSet dt = GetInvDataTable(); 
DataView dv = new DataView(dt, "type = 15", null, 
     DataViewRowState.CurrentRows); 

:使用数据视图(而不是数据集)

伪代码填充组合框现在您可以使用DataView(变量dv)来填充CombobBox,就像您最初使用DataSet进行操作一样。

如果您使用的是BindingSource,那么只需将BindingSource的DataSource设置为您的DataView(本例中为dv)即可。

你没有提到你正在使用的.NET版本,但如果你使用3.5或4,你也可以使用linq来过滤你的数据集。您需要添加DataSetExtensions程序集作为项目的参考。

DataTable invDataTable = GetInvDataTable(); 

EnumerableRowCollection<DataRow> query = 
    from inv in invDataTable.AsEnumerable() 
    where order.Field<int>("type") == 15 
    select inv; 

DataView dv = query.AsDataView(); 

bindingSource1.DataSource = dv; 
+0

@Shiv:dupe answer – 2011-02-06 06:35:27