DataColumn、DataRow和DataView

动态表格列管理:DataColumn类

DataColumn用来表示数据表中的列,主要作用是管理数据表中的列集合。可以通过其创建新的临时表结构,也可以用其来获取当前数据表中的某列。

DataColumn类提供了列的类型,可以在创建临时表时限制列的内容。DataColumn类似数据库中的字段,数据表的结构主要是通过DataColumn来构建的。

语法定义:

DataColumn有5种构造方法,如下:

public DataColumn() //不带参数构造方法

public DataColumn(string columnName)  //列的名称

public DataColumn(string columnName,Type dataType) //列的名称,列类型

public DataColumn(string columnName,Type dataType,string expr) //列名称,列类型,表达式

public DataColumn(string columnName,Type dataType,string expr,MappingType type) //列名称,列类型,表达式,映射类型

下面演示常用的三种构造方法,

DataColumn col = new DataColumn();

DataColumn col1 = new DataColumn("姓名");

DataColumn col2 = new DataColumn("姓名",typeof(string));  //指定列名和列类型的构造

 

应用:用DataColumn创建临时的数据源

DataColumn类的主要功能是动态创建表的结构。

private DataTable CreateTable()
{
   DataColumn col1 =new DataColumn("姓名");    //构建列
   DataColumn col2 = new DataColumn("所在城市");
   DataTable dt = new DataTable();  
   dt.Columns.Add(col1);   //添加列到表中
    dt.Columns.Add(col2);
   dt.Rows.Add("张三","北京");     //添加行内容
   return dt;   
   
}

在Page_Load中,利用CrateTable方法为GridView设置数据源,代码如下:

protected void Page_Load(Object sender,EventArgs e)
{
   if(!IsPostBack)
   {
       GridView1.DataSource = CreateTable();
       GridView1.Databind();
   }
}



 动态表格行管理:DataRow类

DataRow类用来创建一行数据,一般与DataTable对象结合,共同组成一个有数据的数据表。其中DataTable用来控制数据表的结构,而DataRow用来添加或获取表中的数据。

DataRow的主要功能就是对DataTable中的数据进行操作,主要包括增、删、改等常用数据操作。其还提供了一个属性"Item",用来获取数据行中的某列。

DataRow语法定义:

DataRow只有一种构造方法,如下所示

protected internal DataRow(DataRowBuilder builder)

这种构造方法不适宜在代码中使用,但DataTable提供了一种直接创建DataRow的方法,代码如下:

DataRow dr = dt.NewRow();

属性详解:

DataRow对象的属性并不多,但是非常重要。下面主要介绍其两个关键的属性"Item"和"RowState"。

Item属性用来获取当前行中的某个列。因为DataRow表示行,包括行中的所有列,所以如果要获取某一列的值,就得借助Item属性。虽然Item是属性,但在使用时,必须用"this[]"索引器来调用。此属性的使用方法如下:

Repsonse.Write(dr[0].ToString());  //输出第一列的值

 

RowState属性包含一组枚举值,用来判断指定行的状态。行的主要状态如下所示。
Added:表示指定行已别添加到表格中

Deleted:表示指定行已经从表格中删除

Detached:表示指定行已经创建了,但并没有在指定的表格中

Modified:表示指定行已经被修改了,但还没有提交所作的更改

Unchanged:表示行处于一般状态,自上次修改后至今未发生变化

RowState属性的使用方法如下:

Response.Write(dr.RowState);  //显示行的状态

下面的代码演示如何使用DataRow类中的方法:

DataTable dt = new DataTable();   //创建表格

dt.Columns.Add("姓名");    //添加“姓名”字段

dt.Columns.Add("年龄");   //添加“年龄”字段

dt.Rows.Add("张三","25");   //添加一条记录

DataRow dr = dt.Rows[0];  //获取第一行

dr[0] = "李四";   //更改行的状态

Response.Write(dr.RowState);  //输出当前行状态

dr.AcceptChanges();  //提交更改

Response.Write(dr.RowState);   //输出当前行状态

 应用:使用DataRow实现GridView的添加新行功能

基础数据源为:XMLFile.xml

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table1>
    <name>张三</name>
    <city>北京</city>
    <address>朝阳东四环</address>
  </Table1>
  <Table1>
    <name>李四</name>
    <city>上海</city>
    <address>浦东技术开发区</address>
  </Table1>
  <Table1>
    <name>刘大</name>
    <city>深圳</city>
    <address>福田商业中心</address>
  </Table1>
</NewDataSet>


 

public partial class _Default : System.Web.UI.Page 
{
    
    protected void Page_Load(object sender, EventArgs e)
    {
        DataSet myds = new DataSet();//创建数据集
        myds.ReadXml(Server.MapPath("~/XMLFile.xml"));//加载XML文件
        GridView1.DataSource = myds.Tables[0];//设置表格的数据源
        GridView1.DataBind();//绑定表格
        DIV1.Visible = false;
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        DIV1.Visible = true;//显示添加的新行
    }
    protected void LinkButton2_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();//创建动态表
        dt.Columns.Add("name");//创建表的结构
        dt.Columns.Add("city");
        dt.Columns.Add("address");
        for (int i = 0; i < GridView1.Rows.Count; i++)//遍历GridView中的数据添加到表中
        {
            dt.Rows.Add(GridView1.Rows[i].Cells[0].Text, GridView1.Rows[i].Cells[1].Text, GridView1.Rows[i].Cells[2].Text);
        }
        dt.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text);//添加新行内的数据
        Response.Write(dt.Rows[0].RowState);  //Added
       dt.AcceptChanges();//提交行的更改
        Response.Write(dt.Rows[0].RowState);  //Unchanged
       if(dt.Rows[5]!=null)
       {
         dt.Rows[5].Delete();  //有意删除第六行
        }
       Response.Write(dt.Rows[0].RowState); //Deleted
       dt.AcceptChanges();//提交行的更改
       Response.Write(dt.Rows[0].RowState); //Unchanged
       DataSet ds = new DataSet();//创建数据集
        ds.Tables.Add(dt);//为数据集添加表
        ds.WriteXml(Server.MapPath("~/XMLFile.xml"));//输出数据到xml文件中
        TextBox1.Text = "";//清空文本框
        TextBox2.Text = "";
        TextBox3.Text = "";
    }
}

数据视图:DataView类

DataView表示一种数据视图,视图的意义在于:其不代表数据本身,而是数据的一个复制版本。对视图的操作,不影响真正的数据,只是改变现实方法。

功能说明:

DataView被称为表格视图,一般作用于DataTable,用来对表格的数据进行排序、过滤、搜索等。在实际操作中,虽然对视图的数据进行了排序,但实际表格中内的数据位置并没有变化,而只是用户看到的视图发生了变化。

使用控件的“DataSource”属性和“DataBind”方法,可以将DataView直接绑定到数据控件上。这种绑定情况下,不能对数据内容进行更改,只能执行一些排序、搜索和导航等操作。

DataView有三种构造方法,

public DataView();

public DataView(DataTable table)

public DataView(DataTable table,string RowFillter,DataViewRowState RowState)

DataView的常用属性:

Count: 过滤之后视图中的行数

Item: 获取视图的指定行

RowFilter:过滤表达式,对视图中的数据进行过滤

RowStateFilter:针对DataRow的RowState属性,进行数据的过滤

Sort:对视图中数据进行排序的表达式

下面演示了视图进行排序的代码:

DataView myView = dt.DefaultView;

myView.Sort="年龄 desc";

GridView1.DataSourse = myView;

GridView1.DataBind();

 例子:

    
    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();//创建表格
        dt.Columns.Add("姓名");//添加“姓名”字段
        dt.Columns.Add("年龄");//添加“年龄”字段
        dt.Rows.Add("张三", "25");//添加记录
        dt.Rows.Add("李四", "20");
        dt.Rows.Add("王五", "22");
        DataView myview = dt.DefaultView;//获取视图
        GridView1.DataSource = myview;//绑定视图到数据控件
        GridView1.DataBind();
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        DataView dv = (DataView)GridView1.DataSource;//获取数据源
        dv.Sort="姓名 desc";//对数据源排序
        string str = "姓名='" +TextBox1.Text +"'";//获取过滤表达式
        dv.RowFilter = str;//开始过滤
        GridView1.DataBind();//重新绑定
    }


 

 


 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值