Bei Verwendung von dataView.RowFilter erhalte ich immer das gefilterte Ergebnis einschließlich des letzten Elements des Datensatzes.DataView-Zeilenfilter enthält immer den letzten Satz
ich einen Test-Datensatz haben:
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 },
};
Erstellen der 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);
}
den Filter und Datenquelle einstellen:
dataView.RowFilter = "[Name] = 'Hans'";
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "TestItem";
comboBox1.DataSource = dataView;
Dies sollte nur Hans als Ergebnis zurück, sondern für mir das gibt die Ergebnisse: Hans und Ludo.
Wenn ich auf 'Ludo' filtere, ergibt es nur 'Ludo'. Warum gibt es immer das letzte Element zurück und wie kann ich sicherstellen, dass es nur das gefilterte Set zurückgibt?
-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;
}
}
ich Ihren Code zu testen, und ich habe nicht eine Überlastung für 'DatView.AddNew (arg1, arg2, arg3)', nur [DatView.AddNew()] (https://msdn.microsoft .com/de-de/library/system.data.dataview.addnew (v = vs.110) .aspx). Haben Sie diese Methode in einem anderen Namespace überschrieben? – djv
Wenn Sie die Datentabelle anstelle von dataView ausfüllen und dann die Datenansicht aus der gefüllten DataTable erstellen, funktioniert sie. – Chevalric
@djv Ja, tut mir leid, dass es eine Funktion ist, die ich benutze, um nicht jede Spalte selbst zuweisen zu müssen. Stattdessen habe ich eine Erweiterung erstellt, die die Parameter überspringt, um die Werte zuzuordnen. – Chevalric