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;
相关文章
|
人工智能 IDE 程序员
Qoder用户上手指南:安装、登录、快捷键、功能亮点(新用户免费领300credits,首购2美元/月)
这个容易让程序员上瘾的 Agentic Coding 平台有哪些上头的功能?对于小白开发者和资深开发者如何用好Qoder呢?
19723 6
Qoder用户上手指南:安装、登录、快捷键、功能亮点(新用户免费领300credits,首购2美元/月)
|
JavaScript 关系型数据库 MySQL
若依框架数据源切换为pg库
若依管理系统切换数据源为pg数据库
3078 1
若依框架数据源切换为pg库
|
开发框架 人工智能 前端开发
【GitHub】github学生认证,在vscode中使用copilot的教程
【GitHub】github学生认证,在vscode中使用copilot的教程
8267 4
|
SQL 前端开发 Java
SpringBoot - 实践阿里巴巴【Manager 层_通用业务处理层】
SpringBoot - 实践阿里巴巴【Manager 层_通用业务处理层】
1146 0
|
8天前
|
人工智能 JSON 自然语言处理
让教学更智慧:用阿里云百炼工作流,自动生成中小学教材内容#小有可为#有温度的AI
通过可视化工作流编排,将大模型推理能力转化为标准化的教学内容生成引擎。教师只需输入教材标题和适用学段,即可自动获得结构完整、符合课程标准的章节内容,大幅降低备课门槛,助力教育资源均衡化。
480 124
|
17天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
4天前
|
人工智能 安全 Cloud Native
Higress 新发布:AI Gateway 能力增强,Gateway API 及其推理扩展持续打磨
增强 AI 网关能力,持续打磨 Gateway API 及其推理扩展。
311 124