zoukankan      html  css  js  c++  java
  • Datatable 使用技巧

    1、增加新列

         有时候数据库存储的是对应项的数字代号,而要在页面上显示数字对应的文字,可以在页面上使用脚本进行转换,但是,一般将这些处理放在业务逻辑层,以便于将数据作其他使用,例如生成报表等,即对数据库中读取的结果进行处理后再显示在页面上。对DataTable进行处理,一般是增加一列,将转换之后的值赋给新列,页面显示的时候读取新列。

    View Code
     1         /// <summary>
     2         /// 对dtResult进行处理,将数字转换为对应的文字
     3         /// </summary>
     4         /// <param name="dtResult">得到的datatable</param>
     5         public void TransdtResult(DataTable dtResult)
     6         {
     7             #region 对dtResult进行处理,用于显示在grid中
     8             //将类别编号转换成名字,而不是在页面上转换,便于生成报表,否则报表中显示为数字
     9 
    10             string typename = "";
    11             dtResult.Columns.Add("TYPE_NAME", System.Type.GetType("System.String"));
    12 
    13             dtResult.Columns["TYPE_NAME"].SetOrdinal(2);//根据需要将新增加的列改变位置,一般新增加的列在最后
    14 
    15             int rowNum = dtResult.Rows.Count;
    16             for (int i = 0; i < rowNum; i++)
    17             {
    18                 switch (dtResult.Rows[i]["TYPE"].ToString())
    19                 {
    20                     case "0":
    21                         typename = "语文";
    22                         break;
    23                     case "1":
    24                         typename = "数学";
    25                         break;
    26                     case "2":
    27                         typename = "英语";
    28                         break;
    29                     case "3":
    30                         typename = "化学";
    31                         break;
    32                     case "4":
    33                         typename = "物理";
    34                         break;
    35                     case "5":
    36                         typename = "其他";
    37                         break;
    38                 }
    39                 dtResult.Rows[i]["TYPE_NAME"] = (object)(typename);
    40             }
    41 
    42             #endregion
    43         }

    2、筛选数据

    DataTable的Select方法

    获取 DataRow 对象的数组。

    重载列表名称                    

    说明 Select()                获取所有 DataRow 对象的数组。 

    Select(String)              按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 DataRow 对象的数组。 
    Select(String, String)                                                                         获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。  Select(String, String, DataViewRowState)                               获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。

    View Code
     1         //Select()获取所有 DataRow 对象的数组。
     2         private void GetRows(DataTable dt)
     3         {
     4             DataRow[] rows = dt.Select();
     5 
     6             //输出某列的数据
     7             for (int i = 0; i < rows.Length; i++)
     8             {
     9                 Console.WriteLine(rows[i]["CompanyName"]);
    10             }
    11         }
    12 
    13         //Select(String)按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 DataRow 对象的数组。  
    14         //获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。
    15         private void GetRowsByFilter(DataTable dt)
    16         {
    17             //筛选条件,确保DataTable中有Date这一列
    18             string expression = "Date > '1/1/00'";
    19 
    20             //按照CompanyName排序
    21             string sortOrder = "CompanyName DESC";
    22             DataRow[] foundRows;
    23 
    24             //加入筛选条件进行筛选
    25             foundRows = dt.Select(expression, sortOrder);
    26 
    27             //输出结果
    28             for (int i = 0; i < foundRows.Length; i++)
    29             {
    30                 Console.WriteLine(foundRows[i][0]);
    31             }
    32         }
    33 
    34         //获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。
    35         private static void GetRowsByFilter()
    36         {
    37             DataTable customerTable = new DataTable("Customers");
    38             // Add columns
    39             customerTable.Columns.Add("id", typeof(int));
    40             customerTable.Columns.Add("name", typeof(string));
    41 
    42             // Set PrimaryKey
    43             customerTable.Columns["id"].Unique = true;
    44             customerTable.PrimaryKey = new DataColumn[] { customerTable.Columns["id"] };
    45 
    46             // Add ten rows
    47             for (int id = 1; id <= 10; id++)
    48             {
    49                 customerTable.Rows.Add(
    50                     new object[] { id, string.Format("customer{0}", id) });
    51             }
    52             customerTable.AcceptChanges();
    53 
    54             // Add another ten rows
    55             for (int id = 11; id <= 20; id++)
    56             {
    57                 customerTable.Rows.Add(new object[] { id, string.Format("customer{0}", id) });
    58             }
    59 
    60             string expression;
    61             string sortOrder;
    62 
    63             expression = "id > 5";
    64             // Sort descending by column named CompanyName.
    65             sortOrder = "name DESC";
    66             // Use the Select method to find all rows matching the filter.
    67             DataRow[] foundRows =
    68                 customerTable.Select(expression, sortOrder,
    69                 DataViewRowState.Added);
    70 
    71             PrintRows(foundRows, "filtered rows");
    72 
    73             foundRows = customerTable.Select();
    74             PrintRows(foundRows, "all rows");
    75         }
    76 
    77         private static void PrintRows(DataRow[] rows, string label)
    78         {
    79             Console.WriteLine("\n{0}", label);
    80             if (rows.Length <= 0)
    81             {
    82                 Console.WriteLine("no rows found");
    83                 return;
    84             }
    85             foreach (DataRow row in rows)
    86             {
    87                 foreach (DataColumn column in row.Table.Columns)
    88                 {
    89                     Console.Write("\table {0}", row[column]);
    90                 }
    91                 Console.WriteLine();
    92             }
    93         }

    它与sql语句的查询有什么区别吗?有区别,这里是利用已经使用sql查询出来的结果,只是对结果做进一步的筛选,以满足其他需求,不用将数据库再查询一次。

  • 相关阅读:
    [CQOI2011]放棋子
    [CF1192B]动态直径
    [CERC2016]凸轮廓线
    19_08_14-19_08_21校内训练 补题
    [模板]线性递推+BM
    19_08_10[校内训练]割图
    [模板]多项式封装(无讲解)
    19_07_11校内训练[字串染色]
    CF990G
    19_07_09校内训练[分组]
  • 原文地址:https://www.cnblogs.com/leanfish/p/2764488.html
Copyright © 2011-2022 走看看