zoukankan      html  css  js  c++  java
  • C#动态操作DataTable(新增行、列、查询行、列等)

      1 public void CreateTable()
      2         {
      3             //创建表
      4             DataTable dt = new DataTable();
      5             
      6             //1、添加列
      7             dt.Columns.Add("Name", typeof(string)); //数据类型为 文本
      8 
      9             //2、通过列架构添加列
     10             DataColumn age = new DataColumn("Age", typeof(Int32));   //数据类型为 整形
     11             DataColumn Time = new DataColumn("Time", typeof(DateTime)); //数据类型为 时间
     12             dt.Columns.Add(age);
     13             dt.Columns.Add(Time);
     14 
     15             //1、添加空行
     16             DataRow dr1 = dt.NewRow();
     17             dt.Rows.Add(dr1);
     18 
     19             //2、添加空行
     20             dt.Rows.Add();
     21 
     22             //3、添加数据行
     23             DataRow dr2 = dt.NewRow();
     24             dr2[0] = "张三"; //通过索引赋值
     25             dr2[1] = 23;
     26             dr2["Time"] = DateTime.Now;//通过名称赋值
     27             dt.Rows.Add(dr2);
     28 
     29             //4、通过行框架添加
     30             dt.Rows.Add("李四",25,DateTime.Now);//Add你们参数的数据顺序要和dt中的列顺对应
     31 
     32         }
     33 
     34 方法二:为已有DateTable添加一新列,其值可设为默认值,也可设这列不可为空。
     35 
     36         public void CreateTable(DataTable vTable)
     37         {
     38             //为已有DataTable添加一新列
     39             DataColumn dc1 = new DataColumn("Tol", typeof(string));
     40             vTable.Columns.Add(dc1);
     41 
     42             //添加一新列,其值为默认值
     43             DataColumn dc2 = new DataColumn("Sex", typeof(string));
     44             dc2.DefaultValue = "";
     45             dc2.AllowDBNull = false;//这在创建表的时候,起作用,在为已有表新增列的时候,不起作用
     46             vTable.Columns.Add(dc2);
     47         }
     48 
     49 方法三:筛选DataTable中的数据,使用 Select()方法,把赛选结果可以保存到 DataRow[] drArr; 数据里面,也可以另存为一个新DataTable
     50 
     51        public void SelectRowDataTable()
     52         {
     53             DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T1"查询出来的结果
     54             for (int i = 0; i < dt.Rows.Count; i++)
     55             {
     56                 if (dt.Rows[i]["C1"].ToString() == "abc")//查询条件
     57                 {
     58                     //进行操作
     59                 }
     60             }
     61             //但这种做法用一两次还好说,用多了就累了。那有没有更好的方法呢?就是dt.Select(),上面的操作可以改成这样:
     62 
     63             DataRow[] drArr = dt.Select("C1='abc'");//查询(如果Select内无条件,就是查询所有的数据)
     64 
     65             //还可以这样操作:
     66             DataRow[] drArr1 = dt.Select("C1 LIKE 'abc%'");//模糊查询(如果的多条件筛选,可以加 and 或 or )
     67             DataRow[] drArr2 = dt.Select("'abc' LIKE C1 + '%'", "C2 DESC");//另一种模糊查询的方法
     68             DataRow[] drArr3 = dt.Select("C1='abc'", "C2 DESC");//排序
     69 
     70             //问题又来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到: 
     71             DataTable dtNew1 = dt.Clone();
     72             for (int i = 0; i < drArr.Length; i++)
     73             {
     74                 dtNew1.Rows.Add(drArr[i]);
     75             }
     76             
     77             //但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了: 
     78             DataTable dtNew2 = dt.Clone();
     79             for (int i = 0; i < drArr.Length; i++)
     80             {
     81                 dtNew2.ImportRow(drArr[i]);//ImportRow 是复制
     82             }
     83         }
     84 
     85 方法四:对DataTable筛选指定字段,并保存为新表
     86 
     87         public void SelectColumnDataTable(DataTable dt)
     88         {
     89             //对DataTable筛选指定字段,并保存为新表。这些字段,确保dt中存在,否则会报错误
     90 
     91             DataTable dtNew = dt.DefaultView.ToTable(false, new string[] { "列名", "列名", "列名" });
     92         }
     93 
     94 方法五:对DataTable进行排序设置(sort)
     95 
     96         public void SortDataTable(DataTable dt)
     97         {
     98             dt.DefaultView.Sort = "id desc";//重新设置排序
     99             DataTable dtNew = dt.DefaultView.ToTable(); //保存在一张新表中
    100         }
  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/YzpJason/p/8727228.html
Copyright © 2011-2022 走看看