动态表格列管理: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();//重新绑定
}