zoukankan      html  css  js  c++  java
  • 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='活动'";

  • 相关阅读:
    利用相关的Aware接口
    java 值传递和引用传递。
    权限控制框架Spring Security 和Shiro 的总结
    优秀代码养成
    Servlet 基础知识
    leetcode 501. Find Mode in Binary Search Tree
    leetcode 530. Minimum Absolute Difference in BST
    leetcode 543. Diameter of Binary Tree
    leetcode 551. Student Attendance Record I
    leetcode 563. Binary Tree Tilt
  • 原文地址:https://www.cnblogs.com/eaysun/p/4138018.html
Copyright © 2011-2022 走看看