添加引用
using System.Data;
创建表
- // 创建一个空表
- DataTable dt = new DataTable();
- // 创建一个名为 "Table_New" 的空表
- DataTable dt = new DataTable("Table_New");
创建列
- //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);
创建行
- //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);
赋值和取值
- // 新建行的赋值
- 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();
筛选行
- // 选择 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");
删除行
- // 使用 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);
- }
复制表
- // 复制表, 同时复制了表结构和表中的数据
- 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]);// 这是加入的是第一行
表排序
- 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();// 转为表
来源: http://www.bubuko.com/infodetail-3259952.html