zoukankan      html  css  js  c++  java
  • DataTable--可能你不知道的一些功能(排序、查询、合并操作) .

    转自:http://blog.csdn.net/hy6688_/article/details/17769155

      写在前面的:

            本来是想写一些关于串口线程的东西的。但是由于自己现在处于项目开发的阶段。最近随着自己对这个项目的不断的认识,以及对出现的问题的不断的研究与学习。发现自己对串口中线程的应用的理解有所偏差。本着对读者负责的原则。我决定推迟对这块研究成果的发表。先说一些在我的项目中也是比较的重要的知识点。

            今天要给大家说是关于DataTable的一些比较少用的功能,我们所用到的DataTable,通常是作为从数据库中查的的返回的结果;或者是在代码中自己新建的DataTable,手动的然后添加一些数据,作为程序中的一个数据仓库进行处理、传递。今天要给大家讲的当然也是对于DataTable的一些操作,当然也是一些比较常用的操作。但我的这篇文章一定对大多数人来说,是非常受益的。

          进入正文:

    一、Merge方法:

            在内存中将两个DataTable合并,存在两种情况1>.表结构相同。2>.表结构不同。

               1>.表结构相同

            如果两个表的表结构相同则将这两个表的数据合并。

    1. DataTable dt1 = new DataTable();   
    2. dt1.Columns.Add("student_no");  
    3. dt1.Columns.Add("student_name");  
    4. dt1.Rows.Add("001""June");  
    5. dt1.Rows.Add("002""zhang");  
    6. dt1.Rows.Add("003""jun");  
    7. DataTable dt2 = new DataTable();   
    8. dt2 .Columns.Add("student_no");  
    9. dt2 .Columns.Add("student_name");  
    10. dt2 .Rows.Add("111""ABC");  
    11. dt2 .Rows.Add("222""XYZ");  
    12. dt2 .Rows.Add("333""OPQ");  
    13. DataTable dt3 = dt1.Copy();   
    14. dt3.Merge(dt2);  
    	DataTable dt1 = new DataTable(); 
    	dt1.Columns.Add("student_no");
    	dt1.Columns.Add("student_name");
    	dt1.Rows.Add("001", "June");
    	dt1.Rows.Add("002", "zhang");
    	dt1.Rows.Add("003", "jun");
    	DataTable dt2 = new DataTable(); 
    	dt2 .Columns.Add("student_no");
    	dt2 .Columns.Add("student_name");
    	dt2 .Rows.Add("111", "ABC");
    	dt2 .Rows.Add("222", "XYZ");
    	dt2 .Rows.Add("333", "OPQ");
    	DataTable dt3 = dt1.Copy(); 
    	dt3.Merge(dt2);
    

        dt3的表内数据为:

    2>.表结构不同:

        如果两个表的表结构不同但有相同的主键。则执行两个表的连接类似jone

    1. DataTable dt1 = new DataTable();   
    2. dt1.Columns.Add( "ID"typeof(int));   
    3. dt1.Columns.Add( "Name"typeof(string));   
    4. dt1.PrimaryKey = new DataColumn[] { dt1.Columns[0]};   
    5. dt1.Rows.Add(1, "Age ");   
    6. dt1.Rows.Add(2, "Apple ");   
    7. dt1.Rows.Add(3, "Orange ");   
    8.   
    9. DataTable dt2 = new DataTable();   
    10. dt2.Columns.Add( "ID"typeof(int));   
    11. dt2.Columns.Add( "Price"typeof(decimal));   
    12. dt2.PrimaryKey = new DataColumn[] { dt2.Columns[0] };   
    13. dt2.Rows.Add(1, 10);   
    14. dt2.Rows.Add(2, 6);   
    15. dt2.Rows.Add(3, 7);   
    16.   
    17. DataTable dt3 = dt1.Copy();   
    18. dt3.Merge(dt2);  
    	DataTable dt1 = new DataTable(); 
    	dt1.Columns.Add( "ID", typeof(int)); 
    	dt1.Columns.Add( "Name", typeof(string)); 
    	dt1.PrimaryKey = new DataColumn[] { dt1.Columns[0]}; 
    	dt1.Rows.Add(1, "Age "); 
    	dt1.Rows.Add(2, "Apple "); 
    	dt1.Rows.Add(3, "Orange "); 
    	
    	DataTable dt2 = new DataTable(); 
    	dt2.Columns.Add( "ID", typeof(int)); 
    	dt2.Columns.Add( "Price", typeof(decimal)); 
    	dt2.PrimaryKey = new DataColumn[] { dt2.Columns[0] }; 
    	dt2.Rows.Add(1, 10); 
    	dt2.Rows.Add(2, 6); 
    	dt2.Rows.Add(3, 7); 
    	
    	DataTable dt3 = dt1.Copy(); 
    	dt3.Merge(dt2);
    


        dt3的表内数据为:

     

        如果dt2中没有dt1中对应的数据,如id为2的数据为空,则结果为:

    二、查找Select

        对于大部分人来说使用Select方法,好像都面对的数据库,对数据库中的数据进行查询。而我们常说DataTable是在内存中的一张表,我们当然能对他进行操作了。

    1. DataRow[] dataRows = dataTable.Select("条件");  
    	DataRow[] dataRows = dataTable.Select("条件");
    

        注意DataTableSelect函数中我们需要提供的是我们的查询条件。即我们通常写sql语句中的Where后的语句。如对上面的操作最后加上

    1. DataRow[] dataRows = dt3.Select("ID =1");  
    2. string str = dataRows[0]["Price"].ToString();  
    3. MessageBox.Show(str);  
    	DataRow[] dataRows = dt3.Select("ID =1");
    	string str = dataRows[0]["Price"].ToString();
    	MessageBox.Show(str);
    


             实现的结果:


        当然也可以在筛选条件中传入参数:

    1. int id;   
    2. string name;  
    3. DataRow[] dataRows = dataTable.Select(string.Format(@"id={0} and name={1}",id,name));  
    	int id; 
    	string name;
    	DataRow[] dataRows = dataTable.Select(string.Format(@"id={0} and name={1}",id,name));
    

    三、排序

        当然你可能会说在获取DataTable之前,先排序后填充,但是往往有些时候是不能做到这一点的。这时候,就用到了DataTable的排序。

    1>.利用查询排序

    1. DataRow[] dataRows = dataTable.Select("条件""id asc"); //一列排序   
    2. DataRow[] dataRows = dataTable.Select("条件""id asc,name asc,..."); //或多列排序    
    3. DataRow[] dataRows = dataTable.Select("恒为True的表达式,如1=1""id asc,name asc,...");//对所有的进行排序   
    	DataRow[] dataRows = dataTable.Select("条件", "id asc"); //一列排序
    	DataRow[] dataRows = dataTable.Select("条件", "id asc,name asc,..."); //或多列排序 
    	DataRow[] dataRows = dataTable.Select("恒为True的表达式,如1=1", "id asc,name asc,...");//对所有的进行排序 
    

        说明:

    1. select方法如同sql语句对单表的查询,条件如同sql语句的where之后的部分,>,<,=,LIKE等都可以使用。
    2. “ASC”(升序)或“DESC”(降序)

        如在上面查找的代码中加入:

    1. DataRow[] dataRows = dt3.Select("ID >0""ID desc");  
    2.            string str = dataRows[0]["Price"].ToString();  
    3.            MessageBox.Show(str);  
     DataRow[] dataRows = dt3.Select("ID >0", "ID desc");
                string str = dataRows[0]["Price"].ToString();
                MessageBox.Show(str);
    


    实现的结果:


    2>.默认视图排序:使用DataViewSort属性

        作用:获取或设置 DataView的一个或多个排序列以及排序顺序。

        属性:一个字符串,它包含列名,后跟“ASC”(升序)或“DESC”(降序)。在默认情况下列按升序排序。多个列可用逗号隔开。

    1. DataView dataView = dataTable.DefaultView;  
    2. dataView.Sort = "id desc";  
    3. dataTable = dataView.ToTable();  
    	DataView dataView = dataTable.DefaultView;
    	dataView.Sort = "id desc";
    	dataTable = dataView.ToTable();
    


    实现的结果:


             Totable方法:就是把视图重新转换为DataTable

    3>.另外说明DataView的另一个很重要的属性RowFilter

        作用:使用RowFilter属性动态筛选记录,从DataTable对象中获取符合该属性指定条件的数据作为DataView对象的数据,若不设置该项,则获取DataTable对象中的所有数据作为DataView对象中的数据。

    RowFilter中的查询语句与前面介绍过的DataTable对象的SELECT()方法的语法一致。例如:

      1. dataView.RowFilter = "ID =1'";  
  • 相关阅读:
    python——数据库操作
    【笔试】T实习生2014 总结
    【JS】Intermediate6:jQuery
    【JS】Intermediate5:Scope
    【JS】Intermediate4:JSON
    【JS】Intermediate3:AJAX
    【JS】Intermediate2:Events and Callbacks
    【JS】Intermediate1:The DOM
    【JS】Beginner9:Arrays
    【JS】Beginner8:Objects
  • 原文地址:https://www.cnblogs.com/puweibuqi/p/3769606.html
Copyright © 2011-2022 走看看