操作datatable数据

          1. #region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回  
            /// <summary>  
            /// DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回  
            /// eg:SortExprDataTable(dt,"Sex='男'","Time Desc",1)  
            /// </summary>  
            /// <param name="dt">传入的DataTable</param>  
            /// <param name="strExpr">筛选条件</param>  
            /// <param name="strSort">排序条件</param>  
            /// <param name="mode">1,直接用DefaultView按条件返回,效率较高;2,DataTable筛选,排序返回符合条件行组成的新DataTable</param>  
            public static DataTable SortDataTable(DataTable dt, string strExpr, string strSort, int mode)  
            {  
                switch (mode)  
                {  
                    case 1:  
                        //方法一 直接用DefaultView按条件返回  
                        dt.DefaultView.RowFilter = strExpr;  
                        dt.DefaultView.Sort = strSort;  
                        return dt;  
                    case 2:  
                        //方法二 DataTable筛选,排序返回符合条件行组成的新DataTable  
                        DataTable dt1 = new DataTable();  
                        DataRow[] GetRows = dt.Select(strExpr, strSort);  
                        //复制DataTable dt结构不包含数据  
                        dt1 = dt.Clone();  
                        foreach (DataRow row in GetRows)  
                        {  
                            dt1.Rows.Add(row.ItemArray);  
                        }  
                        return dt1;  
                    default:  
                        return dt;  
                }  
            }  
            #endregion  #region 获取DataTable前几条数据  
            /// <summary>  
            /// 获取DataTable前几条数据  
            /// </summary>  
            /// <param name="TopItem">前N条数据</param>  
            /// <param name="oDT">源DataTable</param>  
            /// <returns></returns>  
            public static DataTable DtSelectTop(int TopItem, DataTable oDT)  
            {  
                if (oDT.Rows.Count < TopItem) return oDT;  
              
                DataTable NewTable = oDT.Clone();  
                DataRow[] rows = oDT.Select("1=1");  
                for (int i = 0; i < TopItem; i++)  
                {  
                    NewTable.ImportRow((DataRow)rows[i]);  
                }  
                return NewTable;  
            }  
            #endregion  
             
            #region 获取DataTable中指定列的数据  
            /// <summary>  
            /// 获取DataTable中指定列的数据  
            /// </summary>  
            /// <param name="dt">数据源</param>  
            /// <param name="tableName">新的DataTable的名词</param>  
            /// <param name="strColumns">指定的列名集合</param>  
            /// <returns>返回新的DataTable</returns>  
            public static DataTable GetTableColumn(DataTable dt, string tableName, params string[] strColumns)  
            {  
                DataTable dtn = new DataTable();  
                if (dt == null)  
                {  
                    throw new ArgumentNullException("参数dt不能为null");  
                }  
                try  
                {  
                    dtn = dt.DefaultView.ToTable(tableName, true, strColumns);  
                }  
                catch (Exception e)  
                {  
                    throw new Exception(e.Message);  
                }  
                return dtn;  
            }  
            #endregion  


            Select()

            Select(string filterExpression)

            Select(string filterExpression, string sort)

            Select(string filterExpression,string sort, DataViewRowState record States)。

            1) Select()——获取所有 System.Data.DataRow 对象的数组。

            2) Select(string filterExpression)——按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 System.Data.DataRow 对象的数组。

            3) Select(string filterExpression, string sort)——获取按照指定的排序顺序且与筛选条件相匹配的所有 System.Data.DataRow 对象的数组。

            4) Select(string filterExpression, string sort, DataViewRowState recordStates)——获取与排序顺序中的筛选器以及指定的状态相匹配的所有 System.Data.DataRow 对象的数组。

            演示示例:

              1 using System;
              2 
              3 using System.Collections.Generic;
              4 
              5 using System.Text;
              6 
              7 using System.Data;
              8 
              9  
             10 
             11 namespace TestDataTableSelect
             12 
             13 {
             14 
             15     class Program
             16 
             17     {
             18 
             19         static DataTable dt = new DataTable();
             20 
             21         static void Main(string[] args)
             22 
             23         {         
             24 
             25             DataColumn dc1 = new DataColumn("id");
             26 
             27             dc1.DataType=typeof(int);
             28 
             29             DataColumn dc2 = new DataColumn("name");
             30 
             31             dc2.DataType=typeof(System.String);
             32 
             33             dt.Columns.Add(dc1);
             34 
             35             dt.Columns.Add(dc2);
             36 
             37             for (int i = 1; i <=10;i++ )
             38 
             39             {
             40 
             41                 DataRow dr = dt.NewRow();
             42 
             43                 if (i <= 5)
             44 
             45                 {
             46 
             47                     dr[0] = i;
             48 
             49                     dr[1] = i + "--" + "hello";
             50 
             51                 }
             52 
             53                 else
             54 
             55                 {
             56 
             57                     dr[0] = i;
             58 
             59                     dr[1] = i + "--" + "nihao";
             60 
             61                 }
             62 
             63                 dt.Rows.Add(dr);
             64 
             65             }
             66 
             67  
             68 
             69             Select();
             70 
             71             Select("id>='3' and name='3--hello'");//支持and
             72 
             73             Select("id>='3' or id='1'");//支持or
             74 
             75             Select("name like '%hello%'");//支持like   
             76 
             77             Select("id>5","id desc");
             78 
             79             Select("id>5", "id desc",DataViewRowState.Added);
             80 
             81         }
             82 
             83  
             84 
             85         private static void Select()
             86 
             87         {
             88 
             89             DataRow[] arrayDR = dt.Select();
             90 
             91             foreach(DataRow dr in arrayDR)
             92 
             93             {
             94 
             95                 Console.WriteLine(dr[0].ToString()+"    "+dr[1].ToString());
             96 
             97             }
             98 
             99             Console.ReadLine();
            100 
            101         }
            102 
            103  
            104 
            105         private static void Select(string filterExpression)
            106 
            107         {
            108 
            109             DataRow[] arrayDR = dt.Select(filterExpression);
            110 
            111             foreach (DataRow dr in arrayDR)
            112 
            113             {
            114 
            115                 Console.WriteLine(dr[0].ToString() + "    " + dr[1].ToString());
            116 
            117             }
            118 
            119             Console.ReadLine();
            120 
            121         }
            122 
            123  
            124 
            125         private static void Select(string filterExpression, string sort)
            126 
            127         {
            128 
            129             DataRow[] arrayDR = dt.Select(filterExpression,sort);
            130 
            131             foreach (DataRow dr in arrayDR)
            132 
            133             {
            134 
            135                 Console.WriteLine(dr[0].ToString() + "    " + dr[1].ToString());
            136 
            137             }
            138 
            139             Console.ReadLine();
            140 
            141         }
            142 
            143  
            144 
            145         private static void Select(string filterExpression, string sort, DataViewRowState recordStates)
            146 
            147         {
            148 
            149             DataRow[] arrayDR = dt.Select(filterExpression, sort,recordStates);
            150 
            151             foreach (DataRow dr in arrayDR)
            152 
            153             {
            154 
            155                 Console.WriteLine(dr[0].ToString() + "    " + dr[1].ToString());
            156 
            157             }
            158 
            159             Console.ReadLine();
            160 
            161         }
            162 
            163     }
            164 
            165 }

             注意事项:上面的Select操作是大小写不敏感的(记录的字段不敏感),如果需要区分大小写,需要将DataTable的caseSensitive属性设为true。

             将DataRow 转换成DataTable

             1   public DataTable ToDataTable(DataRow[] rows)
             2         {
             3             if (rows == null || rows.Length == 0)
             4             {
             5                 return null;
             6             }
             7             else
             8             {
             9                 DataTable tmp = rows[0].Table.Clone();
            10                 foreach (DataRow row in rows)
            11                 {
            12                     tmp.Rows.Add(row.ItemArray);  // 将DataRow添加到DataTable中
            13                 }
            14                 return tmp;
            15             }
            16         }

             将一个datatable晒选后替换到另一个里面去

            1 DataTable dd;//定义原数据
            2 DataTable data = dt.Clone();
            3             foreach (DataRow item in dd.Rows)
            4             {
            5                 DataRow[] row = dd.Select("xxx=" + item["Id"].ToIntValue());
            6                 //data.Row.Add(row[0]);//这样写报错
            7                 data.ImportRow(row[0]);
            8             }