C# DataTable使用方法详解
程序员文章站
2023-09-08 09:39:19
在项目中常常常使用到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#程序设计有所帮助。
下一篇: 解析C#设计模式编程中适配器模式的实现