XpoDataSource实现排序功能

   最近在做一个项目时,用的ORM解决方案是Devexpress的XPO,功能还是相当强大,使用也很简单,省去了很多ORM中的XmlMapping,就是NBear也要多一个生成的过程,是我这等懒人所不愿意多做的:)
  可惜的是,其Asp.Net的数据源控件 XpoDataSource,却不知怎么设计时居然漏了一个排序的功能,如果用XPCollection来做的话,那还要手工实现增、删、改、翻页等功能,查找官方网站,说是将在以后的版本中添加,没办法,只有先自己动手解决项目的燃眉之急了。

 Reflect出Devexpress.XPO的源码,然后就简单了:)
XpoDataSource.csXpoDataSourceView.cs两个文件复制到自己的项目中,修改名称空间,
XpoDataSource.cs中,添加以下几行:
        [DefaultValue( false )]
        
public   string  SortExpression
        {
            
get
            {
                
return   this .GetView().SortExpression;
            }
            
set
            {
                
this .GetView().SortExpression  =  value;
            }
        }

XpoDataSourceView.cs中,添加以下几行:
         private   string  _sortExpression;
        
public   string  SortExpression
        {
            
get
            {
                
return   this ._sortExpression;
            }
            
set
            {
                
this ._sortExpression  =  value;
            }
        }
然后,在 ExecuteSelect的方法中,加入一行(红字表示):
            Type classType  =  BuildManager.GetType( this .TypeName,  false true );
            arguments.SortExpression = _sortExpression;

            SortingCollection sorting 
=   null ;
            
if  ( ! string .IsNullOrEmpty(arguments.SortExpression))
                  .........
最后,编译,在页面中,修改dxxpo的引用(当然,也可以将控件加到工具箱中)。

页面文件使用示例:
<% @ Register Assembly = " Showfan.XPO "  Namespace = " Showfan.XPO "
    TagPrefix
= " cc1 "   %>
< asp:Content  ID ="Content1"  ContentPlaceHolderID ="MiddlePlaceHolder"  runat ="server" >
    
< cc1:XpoDataSource  ID ="XpoExamResult"  runat ="server"  SortExpression ="Oid,Paper.StartTime DESC"  TypeName ="XXXXXX.Component.ExamResult" >
    
</ cc1:XpoDataSource >
    
< asp:GridView  ID ="GridView1"  runat ="server"  AutoGenerateColumns ="False"  DataKeyNames ="Oid"  DataSourceID ="XpoExamResult" Caption ="考试列表"  Width ="90%" >
        
< Columns >
            
< asp:BoundField  DataField ="Paper.Name"  HeaderText ="试卷名称"   />
            
< asp:BoundField  DataField ="Paper.StartTime"  HeaderText ="开考时间"   />
            
< asp:BoundField  DataField ="Paper.EndTime"  HeaderText ="结束时间"   />
            
< asp:BoundField  DataField ="Paper.Duration"  HeaderText ="考试时长"   />
            
< asp:BoundField  DataField ="StartTime"  HeaderText ="开始时间"   />
            
< asp:BoundField  DataField ="Duration"  HeaderText ="用时"   />
            
< asp:BoundField  DataField ="Point"  HeaderText ="得分"   />
            
< asp:TemplateField  HeaderText ="状态" >
                
< ItemTemplate >
                    
<% # GetName( Eval ( " Status " ))  %>
                
</ ItemTemplate >
            
</ asp:TemplateField >
        
</ Columns >
    
</ asp:GridView >
</ asp:Content >

如果用了App_Theme的话,在skin文件中,加入:
< asp:GridView   runat ="server"  CssClass ="GridTb"   AllowPaging ="True"  PageSize ="15" >
那就一劳永逸了,连GridView的翻页、排序等等功能,在页面中都不需要逐个设置了。
但是使用过程中,却丢失了智能标记,属性窗口等可视化编辑的功能,也没时间多整它了,算是下一个版本出来前的临时解决方案吧:D

支持排序的XpoDatasource源码下载

转载于:https://www.cnblogs.com/showfan/archive/2008/02/01/XpoDataSource.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值