NHibernate之 Castle.ActiveRecord中使用分页控件AspNetPager
来源:互联网 发布:隐藏图标的软件 编辑:程序博客网 时间:2024/06/06 21:06
如果你使用过AspNetPager,如果你想在Castle.ActiveRecord集成的NHibernate下使用AspNetPager ,如果你不知道如何使用分页方法 SlicedFindAll并使用分页控件 AspNetPager ,那么,这篇文章就是为您准备的:
下面是我封装的(5个重载,不会使用SlicedFindAll的话多看看,以期引玉)SlicedFindAll分页算法:
为便于封装,我使用的是ActiveRecordMediator.SlicedFindAll(),大家也可以使用继承了ActiveRecordBase的实体类Entity.SlicedFindAll(),即:ActiveRecordBase.SlicedFindAll()。
#region 分页算法 /// <summary> /// ActiveRecord分页方法For AspNetPager /// <para> 例: Order[] orderby = new Order[] { new Order("Xh", true) };</para> /// <para>zdyqxs = ServiceComponent.FindSlicedRecords(typeof(XtzdyQxEntity), AspNetPager1, out count, orderby, Expression.Eq("GroupMc", "自定义权限"));</para> /// <para>解志杰注 2011年7月23日 16:24:33</para> /// </summary> /// <param name="targetType">结果集目标类型</param> /// <param name="pager">分页控件AspNetPager</param> /// <param name="count">数据总数</param> /// <param name="orders">排序</param> /// <param name="criteria">条件</param> /// <returns></returns> public static Array FindSlicedRecords(System.Type targetType, AspNetPager pager,out int count, Order[] orders, params ICriterion[] criteria) { count = ActiveRecordMediator.Count(targetType, criteria); int FirstResult = (pager.CurrentPageIndex - 1) * pager.PageSize; return ActiveRecordMediator.SlicedFindAll(targetType, FirstResult, pager.PageSize, orders, criteria); } /// <summary> /// 此方法不带返回 数据总数 的Count,因而需要使用者自己书写Count代码 /// <para>例:new DetachedQuery(SelectHql).SetParameter(0,"解志杰").SetParameter("sex","男")</para> /// <para>解志杰注 2011年7月23日 17:39:41</para> /// </summary> /// <param name="targetType">结果集目标类型</param> /// <param name="pager">分页控件AspNetPager</param> /// <param name="detachedQuery"></param> /// <returns></returns> public static Array FindSlicedRecords(System.Type targetType, AspNetPager pager,IDetachedQuery detachedQuery) { int FirstResult = (pager.CurrentPageIndex - 1) * pager.PageSize; return ActiveRecordMediator.SlicedFindAll(targetType, FirstResult, pager.PageSize, detachedQuery); } /// <summary> /// 此方法仅用于HQL语句不需要传入参数的情况(不可用拼接SQL的方式将参数拼接进去) /// <para>解志杰注 2011年7月23日 17:37:39</para> /// </summary> /// <param name="targetType">结果集目标类型</param> /// <param name="pager">分页控件AspNetPager</param> /// <param name="SelectHql">SelectHql</param> /// <param name="CountHql">CountHql</param> /// <param name="count">数据总数</param> /// <returns></returns> public static Array FindSlicedRecords(System.Type targetType, AspNetPager pager, String SelectHql, String CountHql,out int count) { ScalarQuery<int> sq = new ScalarQuery<int>(targetType, CountHql); count = sq.Execute(); int FirstResult = (pager.CurrentPageIndex - 1) * pager.PageSize; return ActiveRecordMediator.SlicedFindAll(targetType, FirstResult, pager.PageSize, new DetachedQuery(SelectHql)); } /// <summary> /// 此方法仅用于不需要额外使用任何条件的情况 /// <para>解志杰注 2011年7月23日 17:43:27</para> /// </summary> /// <param name="targetType">结果集目标类型</param> /// <param name="pager">分页控件AspNetPager</param> /// <param name="count">数据总数</param> /// <returns></returns> public static Array FindSlicedRecords(System.Type targetType, AspNetPager pager, out int count) { count = ActiveRecordMediator.Count(targetType); int FirstResult = (pager.CurrentPageIndex - 1) * pager.PageSize; return ActiveRecordMediator.SlicedFindAll(targetType, FirstResult, pager.PageSize); } /// <summary> /// 此方法仅用于不需要额外使用任何条件的情况(带排序功能) /// <para>解志杰注 2011年7月23日 18:10:16</para> /// </summary> /// <param name="targetType">结果集目标类型</param> /// <param name="pager">分页控件AspNetPager</param> /// <param name="orderHql">排序Hql语句</param> /// <param name="count">数据总数</param> /// <returns></returns> public static Array FindSlicedRecords(System.Type targetType, AspNetPager pager,string orderHql, out int count) { count = ActiveRecordMediator.Count(targetType); string hql = "from " + targetType.Name + " " + orderHql; int FirstResult = (pager.CurrentPageIndex - 1) * pager.PageSize; return ActiveRecordMediator.SlicedFindAll(targetType, FirstResult, pager.PageSize, new DetachedQuery(hql)); } #endregion
下面是分页控件的触发事件(用的是上面最后一个重载方法):
/// <summary> /// 分页控件事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void AspNetPager1_PageChanged(object sender, EventArgs e) { int count = 0; IList zdyqxs = ServiceComponent.FindSlicedRecords(typeof(XtczyEntity), AspNetPager1, " order by UserLoginZh", out count); this.ShowData(GridView1, AspNetPager1, zdyqxs, count, PagerSkin.None); }
下面是封装的ShowData()方法,其中的参数PagerSkin,及方法InitPagerSkin(aspNetPager, pagerSkin);是我封装的样式,看的时候不用在意它:
/// <summary> /// 实现将用分页算法查询出的“一页结果集”在控件上进行呈现 /// 解志杰注 2009年6月10日 17:34:29 /// </summary> /// <param name="gridView">页面的 GridView 控件ID</param> /// <param name="aspNetPager">页面的AspNetPager控件ID</param> /// <param name="DataSource">DataView、Array等结果集对象(只一页的数据)</param> /// <param name="count">数据库中全部记录数</param> protected void ShowData(GridView gridView, AspNetPager aspNetPager, IEnumerable DataSource, int count, PagerSkin pagerSkin) { aspNetPager.RecordCount = count; InitPagerSkin(aspNetPager, pagerSkin); gridView.DataSource = DataSource; gridView.DataBind(); aspNetPager.Visible = true; }
分页关键代码在AspNetPager1_PageChanged(object sender, EventArgs e)中的:
IList zdyqxs = ServiceComponent.FindSlicedRecords(typeof(XtczyEntity), AspNetPager1, " order by UserLoginZh", out count);
以及FindSlicedRecords()中的:
int FirstResult = (pager.CurrentPageIndex - 1) * pager.PageSize; return ActiveRecordMediator.SlicedFindAll(targetType, FirstResult, pager.PageSize, new DetachedQuery(hql));
总体比较简单,自己看看代码,不多说了。
来源:万达源科技
- NHibernate之 Castle.ActiveRecord中使用分页控件AspNetPager
- 在Castle ActiveRecord中使用NHibernate
- AspNetPager分页控件使用
- 使用AspNetPager控件分页
- 使用AspNetPager控件分页
- Castle ActiveRecord 中使用Access数据库
- Castle ActiveRecord中CountQuery的使用
- Castle ActiveRecord使用笔记
- AspNetPager分页控件的使用
- AspNetPager分页控件的使用
- AspnetPager分页控件的使用
- AspNetPager分页控件的使用
- AspNetPager分页控件的使用
- Repeater使用 AspNetPager分页控件
- AspNetPager分页控件的使用
- AspNetPager分页控件的使用
- AspNetPager分页控件的使用
- AspNetPager分页控件的使用
- 无限下拉列表
- Linux下通过端口杀死进程
- hdu 1086 很基本的计算几何
- 正则表达式入门经典(学习笔记二)——使用正则表达式的分析方法
- 队列的两种C++实现
- NHibernate之 Castle.ActiveRecord中使用分页控件AspNetPager
- IntellIJ IDEA快捷键指南
- IOS开发之──应用之间调用(1)
- 梁念坚漫步“云+端”
- Android 给应用定制皮肤
- H264的视频格式H264支持4:2:0的连续或隔行视频的编码和解码
- hdu Easier Done Than Said?
- C#汉字转拼音缩写
- QuickTime 流媒体编程介绍~~