DataView和DataTable的区别、联系、以及相互转化方法

2023年1月28日09:57:48

一、定义区别

  1. DataTable:表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。

    建立方式
    ①通过连接数据库后从中读取出来跟数据源断开、独立存在的一个表;
    ②完全由程序通过代码来建立的一个表。

  2. DataView:表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

  3. DataRowView:表示

通过DataRowView.Row 属性得到此DataRowView对应的DataRow

可以将DataView同数据库的视图类比,不过二者存在以下区别。

DataView 视图
只能对某一个DataTable建立视图 可以跨表建立视图
通过DataTable.DefaultView属性来建立,通过DataTable.DefaultView的RowFilter 属性和RowStateFilter 属性筛选这个DataTable的一个行子集。

二、相互联系

DataView DataTable
建立在DataTable基础上
DataView.Table 属性可以得到此DataView对应的DataTable
DataView dv = dt.DefaultView; DataTable dt = dv.ToTable();

DataView的toTable和Table

toTable Table
方法 属性
通过RowFilter等过滤后的数据创建新实例 返回原始数据
会对DataView本身的数据产生影响 不会对DataView本身的数据产生影响

三、相互转化

1.dataTable转成dataview
方法一:

        if ((dt == null) || ((dt.Rows).Count < 1)) return;
        IEnumerable  dv = (IEnumerable)((IListSource)dt).GetList();//将datatable转成dataview
        foreach (Object o in dv)
        {
            PropertyDescriptorCollection propDesColl = TypeDescriptor.GetProperties(o);
            foreach (PropertyDescriptor pd in propDesColl)
            {
                Type type = pd.PropertyType;
            }
        }

方法二:

IEnumerable dv = (IEnumerable)((IListSource)dt).GetList();

2.将DataView转换为DataTable

(1).DataView.ToTable()
根据现有DataView中的行,创建并返回一个新的DataTable。

(2).DataView.ToTable(String)
参数String为返回的DataTable的名称。

注意:输出的表与输入表的列相同,不可自定义。

(3).DataView.ToTable(Boolean,String[]) || DataView.ToTable(Boolean,String[],String[],…)
参数Boolean为true,去重;为false,不去重。

数组String[]为显示返回列值的集合。去重是针对String去重的。

注意:参数Boolean且默认为false;可自定义返回的列。

DataView dv = new DataView(table);//table是DataTable类型的对象
table = dv.ToTable(true,"ID");//去重,且只返回ID列

(4).DataView.ToTable(String,Boolean,String[])
根据现有DataView中的行,创建并返回一个新的DataTable。比3多一个参数,可以定义返回表的名称。

  • 作者:sihsd
  • 原文链接:https://blog.csdn.net/sihsd/article/details/104096324
    更新时间:2023年1月28日09:57:48 ,共 1521 字。