• DataTable 和 DataView 的理解


    因项目需要,在获得dataset(或者DataTable)之后要对该table进行重新排序,排序规则按照数组fids元素的顺序进行。

    在测试的时候,我用简单的思考方法,在table上增加一列dis,来存放该行的主键在fids中的对应项的索引,一个循环之后,dis都被赋了值,现在就要排序了,因为datatable没有排序功能,就选择了转换DataTable为DataView,然后对DataView进行排序,关键代码如下:

    DataView dw = dt.DefaultView;

    dw.Sort = "dis,发布日期 desc";

    然后把dw绑定到DataGird输出,结果正好符合原意。

    可是具体使用中却出了问题,因为我对dw又进行了一次处理,取该分页需要的某几项绑定到DataGird,于是结果和排序之前一样,没有了变化。

    究其原因,才发现,这里的DataView只是设定了排序规则,并没有实施排序,那么排序在什么时候发生呢,应该是在绑定到DataGird的时候才发生,所以我后来的方法就出了问题。

    总结如下:DataView的筛选和排序功能都是在绑定到数据控件的时候才执行的,如果你是简单的需求(也就是说不需要再取其中的部分数据来绑定数据控件),那就可以使用该功能。

    我的问题的最终解决方法如下(只使用了简单的循环):

    private DataTable SortTable(DataTable dt,string[] pids)

             {

                  DataTable dt0 = dt.Clone(); //复制原表结构

                  for(int i=0;i<pids.Length;i++)

                  {

                       if(pids[i] != string.Empty)

                       {

                           DataRow[] drs = dt.Select("pos_id=" + pids[i]);

                           if(drs.Length > 0)

                           {

                                foreach(DataRow dr in drs)

                                {

                                     dt0.ImportRow(dr); //导入行

                                }

                           }

                       }

                  }

                  return dt0;

         }

    说明:就是对排序的数组循环,在datatable中找对应的行,然后复制到新表中。

  • 相关阅读:
    [Linked List]Convert Sorted List to Binary Search Tree
    [Linked List]Reorder List
    [Linked List]Insertion Sort List
    解剖Nginx·模块开发篇(4)模块开发中的命名规则和模块加载与运行流程
    解剖Nginx·模块开发篇(3)ngx_http_hello_world_module 模块的基本函数实现
    解剖Nginx·模块开发篇(2)ngx_http_hello_world_module 模块基本结构定义
    解剖Nginx·模块开发篇(1)跑起你的 Hello World 模块!
    Nginx 源码完全注释(11)ngx_spinlock
    Nginx 源码完全注释(10)ngx_radix_tree
    Nginx源码完全注释(9)nginx.c: ngx_get_options
  • 原文地址:https://www.cnblogs.com/skylaugh/p/1213153.html
Copyright © 2020-2023  润新知