DataView
不是快照。它会随着基础的DataTable
变化而自动并立即更新。添加到 的DataTable
符合DataView
过滤条件的新行将自动出现在 中DataView
。同样,从 中删除的DataTable
行将自动从 中消失DataView
。
下面说明了DataView
使用 LINQ 时偶数的动态性质:
using System;
using System.Linq;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("FirstName");
var query = from row in dt.AsEnumerable()
where row.Field<string>("FirstName").StartsWith("S")
select row;
DataView view = query.AsDataView();
Console.WriteLine(view.Count); // Prints 0
dt.Rows.Add("Sam");
dt.Rows.Add("John");
Console.WriteLine(view.Count); // Prints 1
dt.Rows.Add("Sally");
dt.Rows.Add("Mary");
Console.WriteLine(view.Count); // Prints 2
dt.Rows.RemoveAt(0);
Console.WriteLine(view.Count); // Prints 1
}
}
}
修改基础 DataTable 时,DataView 是否添加要更新的事件?
这是一个内部实现细节,但它使用事件是合理的。
请注意,如果您确实要创建 的快照,可以使用DataTable.Copy
复制 的方法。DataTable
DataTable