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 },
};
DataView를 만들기 : 필터 및 데이터 소스를 설정
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;
이 결과 만 만 한스을 반환해야 나에게 이것은 결과를 준다 : 한스와 루도.
'루도'를 필터링하면 '루도'만 표시됩니다. 왜 항상 마지막 요소도 반환하며 필터링 된 집합 만 반환하도록하려면 어떻게해야합니까?
-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/ko-us/library/system.data.dataview.addnew (v = vs.110) .aspx). 다른 네임 스페이스에서이 메서드를 재정의 했습니까? – djv
dataView 대신 datatable을 채운 다음 채워진 DataTable에서 dataview를 만들면 작동합니다. – Chevalric
@djv 예. 죄송합니다. 각 열을 스스로 할당 할 필요가없는 함수입니다. 대신 매개 변수를 반복하여 값을 할당하는 확장을 만들었습니다. – Chevalric