Rainbow分页解决方案

简介:

Rainbow是C#编写的一个优秀的开源门户网站项目。无论是实际应用还是拿来学习,都是一个不错的选择。目前似乎汉化最好的是RC4的版本,在bussoft有下载。但遗憾的是其中很多的功能模块都不提供分页的功能。在网上找了下,发现以下的解决方案:
Rainbow其实已经自带分页的功能支持,如在Rainbow.UI.WebControls下,IPaging接口、Paging和PagingNumbers控件在RC4版本中都是现成的了。
在每个对应模块中按照一定的步骤适当修改一下原有的代码及其存储过程,就可以达到分页的目的:
以Announcements模块为例:
1. 增加代码到ascx的头部分:

<%@ Register TagPrefix="cc2" Namespace="Rainbow.UI.WebControls" Assembly="Rainbow" %>

在需要放置分页器的地方放置以下代码:

<p align =right ><cc2:Paging id="pgModules" runat="server" /></p>

这个是放置在右下角的例子。
2. 在ascx对应的cs代码中声明分页器模块:

protected Rainbow.UI.WebControls.IPaging pgModules;

3. 声明分页的缺省大小:

            SettingItem PageSize =  new SettingItem( new 

Rainbow.UI.DataTypes.IntegerDataType());
            PageSize.Value = "10";
             this._baseSettings.Add("PageSize",PageSize);

放在构造函数Announcement()中。

4. 在初始化OnInit代码部分添加事件代理的响应:

pgModules.OnMove +=  new EventHandler(Page_Changed);

5. 当然需要添加对应的Page_Changed代码:

   private  void Page_Changed( object sender, System.EventArgs e)
   {
    pgModules.RecordsPerPage = Int32.Parse(Settings["PageSize"].ToString());
    BindList(pgModules.PageNumber);  
  }

6. 定义新的DataBind函数:

         private  void BindList( int Page)
         {
            string sortField = Settings["SortField"].ToString();
            string sortDirection = Settings["SortDirection"].ToString();

            AnnouncementsDB announcements = new AnnouncementsDB();
            DataSet announces = announcements.GetAnnouncementsPaged(ModuleID, 

Version,Page,pgModules.RecordsPerPage);
            
            if (announces.Tables.Count>0 && announces.Tables[0].Rows.Count >0)
            {
               pgModules.RecordCount = (int)(announces.Tables[0].Rows[0]["RecordCount"]);
            }


                DataView myDataView = new DataView();
                myDataView = announces.Tables[0].DefaultView;
                myDataView.Sort = sortField + " " + sortDirection;            
                myDataList.DataSource = myDataView;
                myDataList.DataBind();
        }

7. 在Page_Load中,替换掉原来的Databind的方法:

                pgModules.RecordsPerPage = Int32.Parse(Settings["PageSize"].ToString());
                BindList(pgModules.PageNumber);

8. 在数据库中建立对应的分页操作的存储过程,如 rb_GetAnnouncementsPaged,注意付给适当的权限。

CREATE    PROCEDURE rb_GetAnnouncementsPaged
(
    @ModuleID  int,
    @WorkflowVersion  int,
    @Page  int,
    @RecordsPerPage  int
)
AS

DECLARE @FirstRec  int, @LastRec  int

CREATE  TABLE #TempItems
(
ID  int  IDENTITY,
ItemID  int,
CreatedByUser  nvarchar( 100),
CreatedDate  datetime,
Title  nvarchar( 150),
MoreLink  nvarchar( 150),
MobileMoreLink  nvarchar( 150),
ExpireDate  datetime,
Description  nvarchar( 2000)
)

BEGIN 
SET NOCOUNT  ON

IF ( @WorkflowVersion  =  1 )
INSERT  INTO
#TempItems
(
ItemID, CreatedByUser, CreatedDate, Title,
MoreLink, MobileMoreLink, ExpireDate, Description
)
     SELECT
        ItemID,
        CreatedByUser,
        CreatedDate,
        Title,
        MoreLink,
        MobileMoreLink,
        ExpireDate,
        Description
     FROM 
        rb_Announcements
     WHERE
        ModuleID  = @ModuleID
       AND
        ExpireDate  >  GETDATE()
     ORDER  BY CreatedDate  DESC
ELSE
INSERT  INTO
#TempItems
(
ItemID, CreatedByUser, CreatedDate, Title,
MoreLink, MobileMoreLink, ExpireDate, Description
)
     SELECT
        ItemID,
        CreatedByUser,
        CreatedDate,
        Title,
        MoreLink,
        MobileMoreLink,
        ExpireDate,
        Description
     FROM 
        rb_Announcements_st
     WHERE
        ModuleID  = @ModuleID
       AND
        ExpireDate  >  GETDATE()
     ORDER  BY CreatedDate  DESC

SELECT @FirstRec  = (@Page  -  1* @RecordsPerPage
SELECT @LastRec  = (@Page  * @RecordsPerPage  +  1)

SELECT  *, ( SELECT  COUNT( *FROM #TempItems) RecordCount
FROM #TempItems
WHERE ID >@FirstRec  AND ID <@LastRec

SET NOCOUNT  OFF
END

GO

9. 当然,数据访问层也需要修改,如6中也可以看到了,需要增加GetAnnouncementsPaged函数在AnnouncementsDB中:

         public DataSet GetAnnouncementsPaged( int moduleID, WorkFlowVersion version, int page, 

int perPageNumber) 
         {
            SqlConnection myConnection = PortalSettings.SqlConnectionString;
            SqlDataAdapter myCommand = new SqlDataAdapter("rb_GetAnnouncementsPaged", myConnection);
            myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
            SqlParameter parameterModuleID = new SqlParameter("@ModuleID", SqlDbType.Int, 4);
            parameterModuleID.Value = moduleID;
            myCommand.SelectCommand.Parameters.Add(parameterModuleID);
            SqlParameter parameterWorkflowVersion = new SqlParameter("@WorkflowVersion", SqlDbType.Int, 4);
            parameterWorkflowVersion.Value = (int)version;
            myCommand.SelectCommand.Parameters.Add(parameterWorkflowVersion);
            SqlParameter parameterPage = new SqlParameter("@Page", SqlDbType.Int, 4);
            parameterPage.Value = page;
            myCommand.SelectCommand.Parameters.Add(parameterPage);
            SqlParameter parameterPerPageNumber = new SqlParameter("@RecordsPerPage", SqlDbType.Int, 4);
            parameterPerPageNumber.Value = perPageNumber;
            myCommand.SelectCommand.Parameters.Add(parameterPerPageNumber);
            DataSet myDataSet = new DataSet();
            try
            {
                myCommand.Fill(myDataSet);
            }

            finally
            {
                myConnection.Close(); 
             }
             return myDataSet;
        }

10. 有些模块原来是使用SqlDataReader的,在分页中也可以适当将其分页用DataSet来替代,如Discussion模块。


本文转自风前絮~~博客园博客,原文链接:http://www.cnblogs.com/windsails/archive/2004/12/16/77953.html,如需转载请自行联系原作者

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
安全 测试技术 开发工具
Git分支和标签的命名规范
四个环境分别是:dev、test、pre、pro(master),中文名字:开发环境、测试环境、灰度环境、生产环境 dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。 test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定 pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。 pro(master)环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境
|
JavaScript
js计算时间为刚刚、几分钟前、几小时前、几天前··
js计算时间为刚刚、几分钟前、几小时前、几天前··
303 0
|
JavaScript
vue3 使用第三方插件问题 bundler to alias “vue“ to “vue/dist/vue.esm-bundler.js
vue3 使用第三方插件问题 bundler to alias “vue“ to “vue/dist/vue.esm-bundler.js
vue3 使用第三方插件问题 bundler to alias “vue“ to “vue/dist/vue.esm-bundler.js
|
8月前
|
SQL 数据挖掘 数据库
第三篇:高级 SQL 查询与多表操作
本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
590 1
|
12月前
|
Java 网络安全 开发工具
Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合
通过本文,读者可以深入了解Git的核心概念和实际操作技巧,提升版本管理能力。
|
自然语言处理 JavaScript 前端开发
vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载
【6月更文挑战第4天】导文 vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载 文章重点 内容效果展示: 当div拉到底部的时候: 在这里插入图片描述 编辑器返回: 在这里插入图片描述 代码展示 在Vue 2中,可以通过监听div的scroll事件来判断滚动条是否到达了底部。以下是一个简单的示例:
522 2
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
586 5
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
280 7
|
存储 程序员
30分钟使用Docsify+Github Pages搭建个人博客
30分钟使用Docsify+Github Pages搭建个人博客
494 0
30分钟使用Docsify+Github Pages搭建个人博客
hutool工具分页工具
hutool工具分页工具