仰天一笑

昨日不悔,今日勿失,明日莫忧! —徐羽

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  230 随笔 :: 27 文章 :: 803 评论 :: 39 Trackbacks
因项目需要,在获得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中找对应的行,然后复制到新表中。

posted on 2008-06-03 23:48 仰天一笑 阅读(469) 评论(2)  编辑 收藏 所属分类: ASP.Net-C#

评论

#1楼  2008-06-04 04:53 liangwei389      
受教了!
谢谢博主!
  回复  引用  查看    

#2楼  2008-06-05 14:59 孤蝶傲飞      
记得以前有碰过正向排序和反向排序的问题,虽然GridView本身就有排序的方法,但不知道是微软考虑不全的原因还是什么,控件并不是对当前分页排序,而是全局的,后来还是使用Repeater解决了
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交