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

2023-12-15 10:48

本文主要是介绍DataView和DataTable的区别、联系、以及相互转化方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、定义区别

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

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

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

  3. DataRowView:表示

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

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

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

二、相互联系

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

DataView的toTable和Table

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

三、相互转化

1.dataTable转成dataview
方法一:

        if ((dt == null) || ((dt.Rows).Count < 1)) return;IEnumerable  dv = (IEnumerable)((IListSource)dt).GetList();//将datatable转成dataviewforeach (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多一个参数,可以定义返回表的名称。

这篇关于DataView和DataTable的区别、联系、以及相互转化方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/496176

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL