XCodeFactory

C#编程爱好者
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

XCodeFactory高级特性(一)--分页

Posted on 2005-12-14 10:57  C#编程爱好者  阅读(635)  评论(0编辑  收藏  举报
    很久没有更新关于XCodeFactory的文章了,因为最近一段时间忙着学习Spring.NET和NHibernate,对比一下NHibernate与XCodeFactory,发现XCodeFactory在中小型的应用中还是很有用武之地的,当然,如果你开发大型的应用,我强烈支持你使用NHibernate来解决数据层问题。在学习告一段落后,接下来这几天终于可以抽出些时间来讲讲XCodeFactory高级特性了,就先从分页讲起吧。
    大家一定还记得,在IDBAccesser接口中有一个方法GetPaginationMgr,其签名如下:
    IPaginationManager GetPaginationMgr(int page_size ,string whereStr ,string[] columns ) ;
    对应的DataEntrance也有一个类似的方法:
    public static IPaginationManager GetPaginationMgr(Type objType ,int page_size ,string whereStr ,string[] columns)

    参数page_size表示每页包含的记录个数,whereStr是搜索条件的where字句,columns表示要从数据库中取出哪些列。我们现在还是基于XCodeFactory3.0完全攻略--简单示例 中的项目示例来说明分页功能的使用。
    首先,在XcfTestProject项目中添加一个Form用于显示分页的效果,Form的构造如下图所示:

    
    为该Form添加IPaginationManager私有成员,并在Ctor中初始化它,然后显示出第一页。   
        private IPaginationManager paginationMgr = null ;

        
public Form2()
        {        
            InitializeComponent();

            
//找出所有年龄大于22岁的学生
            string whereStr = string.Format("where {0} > '22'" ,Student._Age) ;            
            
string[] columns = {"*"} ; //找出所有列
            this.paginationMgr = DataEntrance.GetPaginationMgr(typeof(Student) ,15 ,whereStr ,columns) ;

            
//显示第一页
            this.dataGrid1.DataSource = this.paginationMgr.GetPage(0) ;
        }
    
    “上一页”、“下一页”和“转到页面”事件处理:
        private void button_prePage_Click(object sender, System.EventArgs e)
        {
            
this.dataGrid1.DataSource = this.paginationMgr.PrePage() ;
        }

        
private void button_NextPage_Click(object sender, System.EventArgs e)
        {
            
this.dataGrid1.DataSource = this.paginationMgr.NextPage() ;
        }

        
private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)
        {
            
int pageIndex = int.Parse(this.textBox_pageIndex.Text.Trim()) ;
            
this.dataGrid1.DataSource = this.paginationMgr.GetPage(pageIndex) ;
        }

    可见使用IPaginationManager进行分页是多么的简单。其中要注意的是,如果指定index的页面不存在,IPaginationManager.GetPage(int pageIndex)将会返回null。上面的代码没有处理可能的异常,仅仅说明了如何使用IPaginationManager 。最后给出一幅有了分页结果的截图。


    关于分页管理器的详细实现,可以参见这里
   
    XCodeFactory3.0完全攻略 目录