DataSet和DataTable详解

先构建一个结构与用户请求数据结构相同的DataTable,然后将用户的请求数据填充到构建好的DataTable中,最后将DataTable添加到DataSet中。

DataTable,,DataColumn,DataRow 深入研究

DataTable是内存中的一个关系数据表,可以独立创建使用,也可以作为DataSet的一个成员使用!

如何将DataTable作为DataSet的一个成员使用:
首先创建一个DataTable对象,其次通过使用Add方法将其添加到DataSet对象的Tables集合中
示例:
DataSet dsClass = new DataSet();   //创建一个新的空班级DataSet
DataTable dtClass = new DataTable("Class"); //创建班级表
dsClass.Tables.Add(dtClass);  //将班级表添加到DataSet中
如果没有指定DataTable名称时把DataTable添加到DataSet中,该表会得到一个从“0”开始递增的默认表名

刚开始创建的表没有表结构,要定义表的结构,必须创建DataColumn对象并将其添加到表的Columns集合中。在为DataTable定义了结构之后,通过DataRow对象将数据添加到表的Rows集合中

DataColumn

DataColumn是创建DataTable的基础,通过向DataTable中添加一个或多个DataColumn对象来定义DataTable的结构。DataColumn有一些常用属性用于对输入数据的限制,例如:数据类型,数据长度,默认值。

DataColumn的常用属性
AllowDBNull   是否允许空值
ColumnName    存储的数据类型
DataType      存储的数据类型
MaxLength     获取或设置文本列的最大长度
DafaultValue  默认值
Table        所属的DataTable的名称
Unique       DataColumn的值是否唯一

定义DataColumn有两种方法,
方法一:
//创建班级名称列
DataColumn className = new DataColumn();
className.ColumnName = "ClassName";
className.DataType = System.Type.GetType("System.String");
className.MaxLength = 50;

//创建班级名称列
DataColumn className = new DataColumn("ClassName",typeof(string));
className.MaxLength = 50;

DataRow
DataRow表示DataTable中包含的实际数据,我们可以通过DataRow将数据添加到用DataColumn定义好DataTable中。

//创建班级名称列
DataColumn className = new DataColumn("ClassName",typeof(string));
className.MaxLength = 50;
//创建一个新的数据行
DataRow drClass = dtClass.NewRow();
drClass["className"] = this.txtClassName.Text.Trim();

如何自定义DataSet
1.创建DataSet对象
2.创建DataTable对象
3.创建DataColumn对象构建表结构
4.将创建好的表结构添加到表中
5.创建DataRow对象新增数据
6.将数据插入到表中
7.将表添加到DataSet中

示例:
//创建一个新的空班级DataSet
DataSet dsClass = new DataSet();
//创建班级表
DataTable dtClass = new DataTable("Class");
//创建班级名称列
DataColumn dcClassName = new DataColumn("ClassName",typeof(string));
className.MaxLength = 50;
//创建年级ID列
DataColumn dcGradeID = new DataColumn(GradeID",typeof(int));
//将定义好列添加到班级表中
dtClass.Columns.Add(dcClassName);
dtClass.Columns.Add(dcGradeID);
//创建一个新的数据行
DataRow drClass = dtClass.NewRow();
drClass["className"] = this.txtClassName.Text.Trim();
drClass["gradeID"] = objGrade.GetGradeIDByGradeName(this.cboGrade.Text.Trim());
//将新的数据行插入班级表中
dtClass.Rows.Add(drClass);
//将班级表添加到DataSet中
dsClass.Tables.Add(dtClass);

如何获取DataSet中的数据
从DataSet中获取数据有两种方式:
1.第一种方式是通过指定DataSet中的具体DataTable的某行某列来获取数据。
    步骤:
        1.通过表名,从DataSet中获取指定的DataTable
        2.通过索引,从DataTable中获取指定的DataRow
        3.通过列名,从DataRow中获取指定列的数据
例:
//得到班级名称
dsClass.Table["Class"].Row[0]["ClassName"];
//得到年级ID
dsClass.Tables["Class"].Row[0]["GradeID"]

2.另一种方式是将DataSet中的数据直接绑定到数据展示控件上。

我们一般都需要对从DataSet中提取出来的数据做一些简单的修饰,如隐藏特定列,按照某列排序。其实很简单,.net为我们提供了一个DataView对象,它可以像数据库中的视图一样帮助我们建立DataSet中数据对应的不同视图。(一个DataTable可以动态生成多个DataView)

DataView
DataView为我们提供DataTable的动态视图,并可以对动态生成的视图中的数据进行排序、笪选等操作,它与数据库中的视图类似,唯一不同的是它无法提供关联DataTable的视图,它不能排除原表中存在的列,也不能向原表中追加不存在的列

示例:
//过滤掉用户状态为非活动的学员
//对过过滤后的学员信息以学员名称降序排序
DataSet dsStudent = new DataSet();
DataView dvStudent = new DataView();
dvStudent.Table = dsStudent.Tables["studentTable"];
dvStudent.RowFilter = "UserState = ‘活动‘";
dvStudent.Sort = "StudentName DESC";

DataView几个常用的属性:
Table        用于获取或设置源DataTable
Sort          获取或设置DataView的一个或多个排序列以及排序顺序
RowFilter     获取或设置用于筛选在DataView中查看哪些行的表达式
Count          在应用RowFilter后,获取DataView中的行数

经验:
在开发中如果需要对DataGrigView展示的数据进行动态筛选或排序时,我们最好使用DataTable的DefaultView(默认视图)属性来得到DataTable的视图,这样我们就可以减少实例化DataView对象的步骤,以及获取DataView对象原DataTable的过程。
DataTable dtStudent = (DataTable)dataGridView.DataSource;
dtStudent.Tables["studentTable"].DefaultView.RowFilter = "UserState=‘活动‘";

时间: 2024-11-07 16:26:54

DataSet和DataTable详解的相关文章

关于PagedDataSource分页属性与DataSet和DataTable详解

Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeater控件具有更高的样式自定义性,所以很多时候我们喜欢使用DataList或Repeater控件来显示数据. PagedDataSource 类封装 DataGrid 控件的属性,这些属性使 DataGrid 可以执行分页.PagedDataSource 类的部分公共属性: AllowCustomPag

C# DataTable 详解

添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空表 DataTable dt = new DataTable("Table_New"); 创建列 //1.创建空列 DataColumn dc = new DataColumn(); dt.Columns.Add(dc); //2.创建带列名和类型名的列(两种方式任选其一) dt.Colu

001_ jQuery的表格插件dataTable详解

一. 1.启用id为"datatable1"标签的html的表格jQuery库 $("#datatable1").dataTable( ) Reference: http://www.w3school.com.cn/jquery/jquery_syntax.asp https://datatables.net/  #官网 http://datatables.club/example/diy.html   #自定义表格插件的重要demo 原文地址:https://ww

C# DataTable详解

添加引用 using System.Data; 创建表 //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空表 DataTable dt = new DataTable("Table_New"); 创建列 //1.创建空列 DataColumn dc = new DataColumn(); dt.Columns.Add(dc); //2.创建带列名和类型名的列(两种方式任选其一) dt.Colu

Linq实战 之 DataSet操作详解

Linq实战 之 DataSet操作详解  一:linq to Ado.Net 1. linq为什么要扩展ado.net,原因在于给既有代码增加福利.FCL中在ado.net上扩展了一些方法. 简单一点的说: 就是在DatTable 和 DataRow 上面做了一些扩展. 二:扩展方法一览 1. AsEnumerable 2. Field 三:扩展类一览 DataTableExtensions 扩展 => public static EnumerableRowCollection<DataRo

深入详解DataTable

在学习DataTable知识之前,我们有必要了解下ADO.NET.以下摘自MSDN: ADO.NET 对 Microsoft SQL Server 和 XML 等数据源以及通过 OLE DB 和 XML 公开的数据源提供一致的访问.数据共享使用者应用程序可以使用 ADO.NET 来连接到这些数据源,并检索.处理和更新所包含的数据.ADO.NET 通过数据处理将数据访问分解为多个可以单独使用或一前一后使用的不连续组件.ADO.NET 包含用于连接到数据库.执行命令和检索结果的 .NET Frame

Net编程 详解DataTable用法【转】

http://www.diybloghome.com/article/16.html DataTable表示一个与内存有关的数据表,可以使用工具栏里面的控件拖放来创建和使用,也可以在编写程序过程中根据需要独立创建和使用,最常见的情况是作为DataSet的成员使用,在这种情况下就需要用在编程过程中根据需要动态创建数据表. 1 代码创建DataTable数据表通过添加对象的方式直接在DataSet中创建数据表,可以通过使用Add方法将DataTable添加到DataSet中,这种是使用控件的可视化添

C# Oracle数据库操作类实例详解

本文所述为C#实现的Oracle数据库操作类,可执行超多常用的Oracle数据库操作,包含了基础数据库连接.关闭连接.输出记录集.执行Sql语句,返回带分页功能的dataset .取表里字段的类型和长度等,同时还有哈稀表自动插入数据库等高级任务.需要特别指出的是:在执行SQL语句,返回 DataReader之前一定要先用.read()打开,然后才能读到数据,再用hashTable对数据库进行insert,update,del操作,注意此时只能用默认的数据库连接"connstr". 本文

iOS开发——UI篇OC篇&amp;UIStackView详解

UIStackView详解 一.继承关系.遵守协议.隶属框架及可用平台 UIStackView 类提供了一个高效的接口用于平铺一行或一列的视图组合.Stack视图使你依靠自动布局的能力,创建用户接口使得可以动态的调整设备朝向.屏幕尺寸及任何可用范围内的变化.Stack视图管理着所有在它的 arrangedSubviews 属性中的视图的布局.这些视图根据它们在 arrangedSubviews 数组中的顺序沿着 Stack 视图的轴向排列.精确的布局变量根据 Stack 视图的 axis , d