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
}
}
}
Добавляет ли DataView событие для обновления при изменении базового DataTable?
Это внутренняя деталь реализации, но вполне вероятно, что она использует события.
Обратите внимание, что вы можете использовать метод DataTable.Copy
для копирования DataTable
, если вы действительно хотите создать снимок DataTable
.