我正在尝试创建一个文本框样式过滤器,它允许我在 dataGridView 表中仅显示具有选定匹配条件的 1 行。
该表当前通过数据源绑定到列表对象。
public static List<NpcDrop> npcDrops = new List<NpcDrop>();
//populate npcDrops
dataGridView3.DataSource = Program.npcDrops;
这是这样设置的,所以我可以编辑dataGridView 中的值,底层的npcDrops列表会在单元格更改时自动更新。该列表稍后会保存回文件。
因此,我无法将列表转换为 DataTable 或任何其他对象,因为这会破坏 dataGridView 和列表之间的关系。我曾考虑将列表更改为 DataTable,然后将其更改回 List 类型,但似乎不太可能做到。
我尝试从各种方式解决这个问题:
a) 使用 BindingSource
BindingSource bs = new BindingSource();
bs.DataSource = Program.npcDrops;
bs.Filter = "npcId like '201001'";
dataGridView3.DataSource = bs;
但是似乎没有应用过滤器(主要是由于基于 List的BindingSource不是IEnumerable。
b) 通过将我的 DataSource 转换为 DataTable,然后使用 RowFilter 功能
private void searchId_TextChanged(object sender, EventArgs e)
{
(dataGridView3.DataSource as DataTable).DefaultView.RowFilter =
string.Format("npcId='{0}'", searchId.Text);
}
然而,这给了我对象引用未设置为对象的实例。错误,因为它似乎无法将 dataGridView 转换为 DataTable。
我真的没有想法了,我想知道是否有人可以提供帮助 ^^。
炎炎设计
相关分类