gpt4 book ai didi

c# - DataView rowfilter 始终包含集合中的最后一个

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:48 24 4
gpt4 key购买 nike

使用 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 },
};

创建数据 View :

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”。为什么它总是返回最后一个元素,我如何确保它只返回过滤后的集合?

-编辑

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;
}
}

最佳答案

有一个异常(exception),其他人似乎得到了

DataTable must be set prior to using DataView

(我建议你把它放在搜索引擎中)

虽然你没有得到异常,但你应该遵循这个顺序。

幸运的是,在 DataView 之前设置 DataTable 可以用更少的代码完成,并且没有扩展方法。

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));

// set up the DataTable first
foreach (var item in items)
{
dataTable.Rows.Add(item.name, item.age, item);
}

// then use the DataView
DataView dataView = new DataView(dataTable);

dataView.RowFilter = "[Name] = 'Hans'";

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "TestItem";
comboBox1.DataSource = dataView;

关于c# - DataView rowfilter 始终包含集合中的最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43187437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com