當使用dataView.RowFilter時,我總是得到包含數據集最後一個元素的過濾結果。DataView rowfilter總是包含集合的最後一個
我有一個測試數據集:
private TestClass[] items =
{
new TestClass{name = "Hans", age = 10 },
new TestClass{name = "Bert", age = 5 },
new TestClass{name = "Gerda", age = 41 },
new TestClass{name = "Dolf", age = 73 },
new TestClass{name = "Ludo", age = 35 },
};
創建數據視圖:
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));
dataTable.Columns.Add("TestItem", typeof(TestClass));
DataView dataView = new DataView(dataTable);
foreach(var item in items)
{
dataView.AddNew(item.name, item.age, item);
}
設置過濾器和數據源:
dataView.RowFilter = "[Name] = 'Hans'";
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "TestItem";
comboBox1.DataSource = dataView;
這應該只返回漢斯的結果,但對於我給出了結果: Hans和Ludo。
如果我對'Ludo'進行篩選,結果只會導致'Ludo'。 爲什麼它總是返回最後一個元素,我如何確保它只返回過濾後的集合?
-edit
public static class DataViewExtensions
{
public static DataRowView AddNew(this DataView dataView, params object[] parameters)
{
DataRowView dataRowView = dataView.AddNew();
int index = 0;
foreach (var parameter in parameters)
{
dataRowView[index++] = parameter;
}
return dataRowView;
}
}
我測試你的代碼,我沒有爲'DatView.AddNew(ARG1,ARG2,ARG3)',只是[DatView.AddNew()](https://msdn.microsoft過載.COM/EN-US /庫/ system.data.dataview.addnew(v = vs.110)的.aspx)。你是否在不同的命名空間中重寫了這個方法? – djv
當填充數據表而不是dataView,然後從填充的DataTable創建數據視圖時,它可以工作。 – Chevalric
@djv是的,我很抱歉,這是一個函數,我用它不必自己分配每列。相反,我做了一個擴展,循環參數分配值。 – Chevalric