我有一个数据表(invTable),其中有19列,我是从csv文件创建的。从那个Datatable我使用column2(name)中的值来填充Combobox。
我需要做的是仅当column9(type)中的值与预设值匹配时,才会过滤出在Combobox中显示的column2(name)中的项目。即,仅当column9(type)中的值为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 :(得分:0)
我不会试图在这里给你一个完整的解决方案,但我希望不会向你发送正确的方向。
基本上你需要使用DataView(这是原始DataSet的“过滤”视图。所以每次想要过滤时,你都会创建一个DataView,为它指定过滤条件。
http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx
上面的链接可以为您提供有效的解决方案。在时代的底部,他们也有例子。
按照您需要的方式过滤DataView后,您可以迭代它的行以填充相关的下拉列表。
已编辑,为OP提供简单的步骤。
开始简单。我假设您知道如何填充ComboBox。
步骤1:获取DataSet中的数据 第2步:使用DataView过滤DataSet Step3:使用DataView(而不是DataSet)填充ComboBox
伪代码:
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来过滤您的DataSet。您需要添加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;