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;
これは結果としてではなくのためだけハンスを返す必要があります私は結果を与える: ハンスとルード。
「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(引数1、ARG2、ARG3)'、単に[DatView.AddNew()]のために過負荷を持っていない(https://msdn.microsoft .com/ja-us/library/system.data.dataview.addnew(v = vs.110).aspx)。別の名前空間でこのメソッドをオーバーライドしましたか? – djv
dataViewの代わりにdatatableを埋め込み、塗りつぶしたDataTableからdataviewを作成すると、それは機能します。 – Chevalric
@djvええ、それは自分で各列を割り当てる必要がないために使用する関数です。代わりに、値を割り当てるためにパラメータをループする拡張機能を作成しました。 – Chevalric