DataTable方法总结
//(1)初始化datatable DataTable dt1 = new DataTable(); dt1.Columns.Add("id", typeof(int)); dt1.Columns.Add("names", typeof(string)); dt1.Columns["id"].Unique = true; dt1.PrimaryKey = new DataColumn[] { dt1.Columns["id"] }; //赋值 DataRow drr = dt1.NewRow(); drr["id"] = 1; drr["names"] = "张三"; dt1.Rows.Add(drr); //(2)datatable之间操作 DataTable dt2 = dt1.Clone();//将dt1的数据克隆到dt2 ,只复制表结构 DataTable dt3 = dt1.Copy();//将dt1的数据复制到dt3 复制数据和表结构 dt3.Merge(dt1);//将dt1与dt3的数据合并,注:同表结构的复制则合并对应列,不同的会增加出不同的列 //将dt1的数据增加到dt2 //法一[直接复制]: dt2 = dt1.Copy(); //法二[导入行的方式]: dt2 = dt1.Clone(); foreach (DataRow item in dt1.Rows) { dt2.ImportRow(item); } //法三[每列循环添加] foreach (DataRow item in dt1.Rows) { DataRow NewRow = dt2.NewRow(); NewRow["id"] = int.Parse(item["id"].ToString()); NewRow["names"] = int.Parse(item["names"].ToString()); dt2.Rows.Add(NewRow); } //(3)DataSet与DataTable的操作 //1.datatable添加到DataSet中、 //①如果是新初始化的DataTable,不属于任何一个DataSet,则直接采用: DataSet ds = new DataSet(); ds.Tables.Add(dt1); // ② dt1已经属于ds这个DataSet了。 因为DataTable是通过引用方式使用的,故一个DataTable不能添加到另外一个DataSet中,则采用以下方式: DataSet ds2 = new DataSet(); ds2.Tables.Add(dt1.Copy());//相当于复制了一个新的datatable添加进去 //对于在一个DataSet中添加多个DataTable,采用上面的②方式不可取,则采用以下方式将每个添加的datatable命名,否则添加进去会报已经存在DataTable,便于添加了不会重复: DataTable dt4 = dt1.Copy(); dt4.TableName = "dt4"; DataTable dt5 = dt1.Copy(); dt4.TableName = "dt5"; ds.Tables.Add(dt4); ds.Tables.Add(dt5);
(4)datatable删除
delete和remove
Delete的使用是 datatable.Rows[i].Delete();
Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);
这两个的区别是,使用delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数.需要使用datatable.AcceptChanges()方法来提交修改.
而Remove方法则是直接删除.
如果在for循环里删除行的话,最好是使用delete方法,不然会出现count变化的情况.循环完后再使用AcceptChanges()方法提交修改,删除掉标记为deleted的行
(5)//去掉重复行
DataView dv = table.DefaultView;
table = dv.ToTable(true, new string[] { "name", "code" });
此时table 就只有name、code无重复的两行了,如果还需要id值则
table = dv.ToTable(true, new string[] { "id","name", "code" });//第一个参数true 启用去重复,类似distinct
(6)datatable过滤
datatable 到datatale的过滤
DataView dvv = dt.DefaultView;
dvv.RowFilter = "boxno in (" + id + ")";
DataTable dtt = dvv.ToTable(); //得到过滤后的datetable值
一个DataView只支持一个RowFilter,你只能使用 not ,and 来连接多个过滤条件
datatable 到dateRow[] 的过滤