zoukankan      html  css  js  c++  java
  • 操作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             }
              
              
              
              
              
              
              
              
  • 相关阅读:
    Tab支持的DHTML Window控件
    仿新浪游戏频道js多栏目全屏下拉菜单导航条
    Jquery实现超酷的时间轴特效
    DIV+CSS专题:第一天 XHTML CSS基础知识
    网站建设:详解网页扁平化设计
    简洁的支持展开关闭的tab标签代码
    JS总结
    codevs 1296 营业额统计 (splay 点操作)
    codeforces gym 100357 H (DP 高精度)
    codeforces gym 100357 K (表达式 模拟)
  • 原文地址:https://www.cnblogs.com/liuduanwu/p/9103265.html
Copyright © 2011-2022 走看看