最近在做一个项目时,用的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, falsetrue);
            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源码下载
posted @ 2008-02-01 00:04 showfan 阅读(1971) 评论(5) 编辑

    在一个项目中,是一个HTML页面内嵌了一个iframe,内嵌页内有一段javascript,是给一个<input type="hinden">赋值的,在本地测试一切正常,部署到服务器上,也正常,但是再从本地(另外一个域名空间上也一样)写一个HTML,内嵌iframe调用服务器上的页面时,出现了“访问拒绝”错误。
  通过查找资料,发现这样一篇文章:实现不同域(Domain)之间的数据交换,说是跨域提交时,要设document.domain,我依样画个瓢,晕,还是不行,试了半天,只好暂时放下。
等解决好了,再将结果贴上,我想可能遇到这样问题的应该不止我一个吧~

posted @ 2007-04-04 23:25 showfan 阅读(1215) 评论(1) 编辑
投身IT英勇无畏,工作行业看似高贵,
其实生活极其琐碎,为了生计吃苦受累,
鞍前马后终日疲惫,客人投诉照死赔罪,
点头哈腰就差下跪,日不能息夜不能寐,
老板一叫立即到位,一年到头加班受罪,
劳动法规统统作废,身心交瘁暗自流泪,
屁大点事反复开会,逢年过节家人难会,
分分秒秒不敢离位,迎接审核让人崩溃,
接待应酬经常喝醉,不伤感情只好伤胃,
工资不高自己交税,走亲访友还得破费,
抛家舍业愧对长辈,身在其中方知其味,
不敢奢望社会地位,全靠傻傻自我陶醉.
posted @ 2007-03-16 10:30 showfan 阅读(56) 评论(0) 编辑

找到一个比较不错的.net网站:http://dotnetslackers.com,收藏一下。

posted @ 2007-03-15 23:39 showfan 阅读(55) 评论(0) 编辑