【发布时间】:2018-07-16 22:36:51
【问题描述】:
我需要从 DataTable 创建一个 DataView,但有一个不寻常的转折:
我需要逐行决定(使用代码)DataTable 中的哪些行包含在 DataView 中。
DataTable dt = LoadData();
DataView dv = new DataView(dt);
foreach (DataRow row in dt.Rows)
{
if (RowIsGood(row))
{
// This obviously doesn't work but I need equivalent logic:
DataRowView drv = new DataRowView();
drv.Row = row;
dv.Add(drv);
}
}
需要注意的一些重要事项:
- 上述 RowIsGood 函数中的代码过于复杂,无法使用标准 RowFilter 方法进行复制。
- DataTable 可能非常大。它也被多个网格控件引用。无法向 DataTable 添加临时列以方便 RowFilter 操作。
- 我使用的是 .NET v4.0。
那么甚至可以使用 DataTable/DataView 架构吗?
LINQ 是否允许我根据需要自定义 DataView?
提前致谢!
【问题讨论】:
-
要求有点模糊,但我会避免这种方法。您可以在 DT 中添加一列或多列,以总结过于复杂的各种条件。目标是获得某种级别的原始值,您可以在 RowFilter 中使用这些值。
-
我认为创建一个带有“RowIsGood”结果的简化表应该可行吗?像“DataTable reduceDt = dt.Clone(); 然后在 for 循环中,if (RowIsGood){ reduceDt.ImportRow(row);} 然后在循环之后,“DataView dv = new DataView(reducedTable);”或者我错过了什么吗?
-
您是否考虑过
DataView.Delete而没有调用AcceptChanges?这些行只是简单地进入删除状态并被隐藏(直到你想要它们回来,然后你可以拒绝更改)
标签: c# datatable ado.net dataview