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

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 对象的数组。

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