欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# DataTable使用方法详解

程序员文章站 2022-06-03 13:06:14
在项目中常常常使用到datatable,假设datatable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对datatable的使用技巧进行一下...

在项目中常常常使用到datatable,假设datatable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对datatable的使用技巧进行一下总结。

1、添加引用

using system.data;

2、创建表

//创建一个空表
datatable dt = new datatable();
//创建一个名为"table_new"的空表
datatable dt = new datatable("table_new");

3、创建列

//1.创建空列
datacolumn dc = new datacolumn();
dt.columns.add(dc);
//2.创建带列名和类型名的列(两种方式任选其一)
dt.columns.add("column0", system.type.gettype("system.string"));
dt.columns.add("column0", typeof(string));
//3.通过列架构添加列
datacolumn dc = new datacolumn("column1",system.type.gettype("system.datetime"));
datacolumn dc = new datacolumn("column1", typeof(datetime));
dt.columns.add(dc);

4、创建行

//1.创建空行
datarow dr = dt.newrow();
dt.rows.add(dr);
//2.创建空行
dt.rows.add();
//3.通过行框架创建并赋值
dt.rows.add("张三",datetime.now);//add里面参数的数据顺序要和dt中的列的顺序对应 
//4.通过复制dt2表的某一行来创建
dt.rows.add(dt2.rows[i].itemarray);

5、赋值和取值

//新建行的赋值
datarow dr = dt.newrow();
dr[0] = "张三";//通过索引赋值
dr["column1"] = datetime.now; //通过名称赋值
//对表已有行进行赋值
dt.rows[0][0] = "张三"; //通过索引赋值
dt.rows[0]["column1"] = datetime.now;//通过名称赋值
//取值
string name=dt.rows[0][0].tostring();
string time=dt.rows[0]["column1"].tostring();

6、筛选行

//选择column1列值为空的行的集合
datarow[] drs = dt.select("column1 is null");
//选择column0列值为"李四"的行的集合
datarow[] drs = dt.select("column0 = '李四'");
//筛选column0列值中有"张"的行的集合(模糊查询)
datarow[] drs = dt.select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or
//筛选column0列值中有"张"的行的集合并按column1降序排序
datarow[] drs = dt.select("column0 like '张%'", "column1 desc");

7、删除行

//使用datatable.rows.remove(datarow)方法
dt.rows.remove(dt.rows[0]);
//使用datatable.rows.removeat(index)方法
dt.rows.removeat(0);
//使用datarow.delete()方法
dt.row[0].delete();
dt.acceptchanges();

//-----区别和注意点-----
//remove()和removeat()方法是直接删除
//delete()方法只是将该行标记为deleted,但是还存在,还可datatable.rejectchanges()回滚,使该行取消删除。
//用rows.count来获取行数时,还是删除之前的行数,需要使用datatable.acceptchanges()方法来提交修改。
//如果要删除datatable中的多行,应该采用倒序循环datatable.rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
for (int i = dt.rows.count - 1; i >= 0; i--)
{
  dt.rows.removeat(i);
}

8、复制表

//复制表,同时复制了表结构和表中的数据
datatable dtnew = new datatable();
dtnew = dt.copy();
//复制表
datatable dtnew = dt.copy(); //复制dt表数据结构
dtnew.clear() //清空数据
for (int i = 0; i < dt.rows.count; i++)
{
  if (条件语句)
  {
     dtnew.rows.add(dt.rows[i].itemarray); //添加数据行
  }
}
//克隆表,只是复制了表结构,不包括数据
datatable dtnew = new datatable();
dtnew = dt.clone();
//如果只需要某个表中的某一行
datatable dtnew = new datatable();
dtnew = dt.copy();
dtnew.rows.clear();//清空表数据
dtnew.importrow(dt.rows[0]);//这是加入的是第一行

9、表排序

datatable dt = new datatable();//创建表
dt.columns.add("id", typeof(int32));//添加列
dt.columns.add("name", typeof(string));
dt.columns.add("age", typeof(int32));
dt.rows.add(new object[] { 1, "张三" ,20});//添加行
dt.rows.add(new object[] { 2, "李四" ,25});
dt.rows.add(new object[] { 3, "王五" ,30});
dataview dv = dt.defaultview;//获取表视图
dv.sort = "id desc";//按照id倒序排序
dv.totable();//转为表

以上就是c# datatable的使用方法,希望对大家学习c#程序设计有所帮助。