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查询出来的结果,只是对结果做进一步的筛选,以满足其他需求,不用将数据库再查询一次。

原文地址:https://www.cnblogs.com/leanfish/p/2764488.html