.Net DataView和DataTable绑定
我有一个简单的Windows窗体应用程序,它将数据视图绑定到列表框。此DataView使用Linq按特定列降序对我的DataTable进行排序。然后将我的列表框绑定到DataView。然后,我有一个简单的表单向DataTable添加数据。当我向DataTable添加DataRow时,它会显示在列表框中 我很好奇幕后到底发生了什么…: DataView对象是一个自定义视图 单个数据表的 过滤或分类。数据视图是 复杂绑定使用的数据“快照” 控制。你可以是简单的,也可以是简单的 复杂绑定到数据集中的数据 查看,但请注意您是 绑定到一个固定的“图片”的 数据,而不是一个干净的、更新的 数据源.Net DataView和DataTable绑定,.net,data-binding,datatable,dataview,.net,Data Binding,Datatable,Dataview,我有一个简单的Windows窗体应用程序,它将数据视图绑定到列表框。此DataView使用Linq按特定列降序对我的DataTable进行排序。然后将我的列表框绑定到DataView。然后,我有一个简单的表单向DataTable添加数据。当我向DataTable添加DataRow时,它会显示在列表框中 我很好奇幕后到底发生了什么…: DataView对象是一个自定义视图 单个数据表的 过滤或分类。数据视图是 复杂绑定使用的数据“快照” 控制。你可以是简单的,也可以是简单的 复杂绑定到数据集中的数
我本以为既然DataView是一个“快照”,它就不会自动更新。DataView是否在修改基础DataTable时添加要更新的事件?不要误解我的意思,我希望它是这样工作的,但总是这样吗?数据视图不是快照。当基础
DataTable
发生更改时,它会立即自动更新。添加到数据表
中的符合数据视图
过滤条件的新行将自动显示在数据视图
中。类似地,从数据表中删除的行将自动从数据视图中消失
以下说明了即使在使用LINQ时,DataView
的动态特性:
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
}
}
}
使用系统;
使用System.Linq;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
dt.列。添加(“名字”);
var query=来自dt.AsEnumerable()中的行
其中row.Field(“FirstName”).StartsWith(“S”)
选择行;
DataView=query.AsDataView();
Console.WriteLine(view.Count);//打印0
dt.行添加(“Sam”);
dt.行。添加(“约翰”);
Console.WriteLine(view.Count);//打印1
dt.行。添加(“萨利”);
dt.行。添加(“玛丽”);
Console.WriteLine(view.Count);//打印2
dt.Rows.RemoveAt(0);
Console.WriteLine(view.Count);//打印1
}
}
}
DataView是否在修改基础DataTable时添加要更新的事件
这是一个内部实现细节,但使用事件是合理的
请注意,如果确实要创建数据表
的快照,可以使用数据表.Copy
方法复制数据表