2011-02-06 91 views
0

我有一個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

回答

0

我不打算試圖在這裏給你一個完整的解決方案,但我希望不要給你正確的方向。

基本上你需要使用一個數據視圖(這是原始數據集的「過濾」的看法。所以喲要篩選每一次,您將創建一個數據視圖分配給它的過濾標準。

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

相關問題