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

Rainbow分页解决方案<%@ Register TagPrefix="cc2" Namespace="Rainbow.UI.WebControls" Assembly="Rainbow" %>

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

Rainbow分页解决方案<p align =right ><cc2:Paging id="pgModules" runat="server" /></p>

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

Rainbow分页解决方案protected Rainbow.UI.WebControls.IPaging pgModules;

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

Rainbow分页解决方案            SettingItem PageSize = new SettingItem(new 
Rainbow分页解决方案
Rainbow分页解决方案Rainbow.UI.DataTypes.IntegerDataType());
Rainbow分页解决方案            PageSize.Value 
= "10";
Rainbow分页解决方案            
this._baseSettings.Add("PageSize",PageSize);
Rainbow分页解决方案

放在构造函数Announcement()中。

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

Rainbow分页解决方案pgModules.OnMove += new EventHandler(Page_Changed);

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

Rainbow分页解决方案  private void Page_Changed(object sender, System.EventArgs e)

6. 定义新的DataBind函数:

Rainbow分页解决方案        private void BindList(int Page)

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

Rainbow分页解决方案                pgModules.RecordsPerPage = Int32.Parse(Settings["PageSize"].ToString());
Rainbow分页解决方案                BindList(pgModules.PageNumber);Rainbow分页解决方案

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

Rainbow分页解决方案CREATE   PROCEDURE rb_GetAnnouncementsPaged
Rainbow分页解决方案(
Rainbow分页解决方案    @ModuleID 
int,
Rainbow分页解决方案    @WorkflowVersion 
int,
Rainbow分页解决方案    @Page 
int,
Rainbow分页解决方案    @RecordsPerPage 
int
Rainbow分页解决方案)
Rainbow分页解决方案
AS
Rainbow分页解决方案
Rainbow分页解决方案
Rainbow分页解决方案DECLARE @FirstRec int, @LastRec int
Rainbow分页解决方案
Rainbow分页解决方案
Rainbow分页解决方案CREATE TABLE #TempItems
Rainbow分页解决方案(
Rainbow分页解决方案ID 
int IDENTITY,
Rainbow分页解决方案ItemID 
int,
Rainbow分页解决方案CreatedByUser 
nvarchar(100),
Rainbow分页解决方案CreatedDate 
datetime,
Rainbow分页解决方案Title 
nvarchar(150),
Rainbow分页解决方案MoreLink 
nvarchar(150),
Rainbow分页解决方案MobileMoreLink 
nvarchar(150),
Rainbow分页解决方案ExpireDate 
datetime,
Rainbow分页解决方案Description 
nvarchar(2000)
Rainbow分页解决方案)
Rainbow分页解决方案
Rainbow分页解决方案
BEGIN 
Rainbow分页解决方案
SET NOCOUNT ON
Rainbow分页解决方案
Rainbow分页解决方案
IF ( @WorkflowVersion = 1 )
Rainbow分页解决方案
INSERT INTO
Rainbow分页解决方案#TempItems
Rainbow分页解决方案(
Rainbow分页解决方案ItemID, CreatedByUser, CreatedDate, Title,
Rainbow分页解决方案MoreLink, MobileMoreLink, ExpireDate, Description
Rainbow分页解决方案)
Rainbow分页解决方案    
SELECT
Rainbow分页解决方案        ItemID,
Rainbow分页解决方案        CreatedByUser,
Rainbow分页解决方案        CreatedDate,
Rainbow分页解决方案        Title,
Rainbow分页解决方案        MoreLink,
Rainbow分页解决方案        MobileMoreLink,
Rainbow分页解决方案        ExpireDate,
Rainbow分页解决方案        Description
Rainbow分页解决方案    
FROM 
Rainbow分页解决方案        rb_Announcements
Rainbow分页解决方案    
WHERE
Rainbow分页解决方案        ModuleID 
= @ModuleID
Rainbow分页解决方案      
AND
Rainbow分页解决方案        ExpireDate 
> GETDATE()
Rainbow分页解决方案    
ORDER BY CreatedDate DESC
Rainbow分页解决方案
ELSE
Rainbow分页解决方案
INSERT INTO
Rainbow分页解决方案#TempItems
Rainbow分页解决方案(
Rainbow分页解决方案ItemID, CreatedByUser, CreatedDate, Title,
Rainbow分页解决方案MoreLink, MobileMoreLink, ExpireDate, Description
Rainbow分页解决方案)
Rainbow分页解决方案    
SELECT
Rainbow分页解决方案        ItemID,
Rainbow分页解决方案        CreatedByUser,
Rainbow分页解决方案        CreatedDate,
Rainbow分页解决方案        Title,
Rainbow分页解决方案        MoreLink,
Rainbow分页解决方案        MobileMoreLink,
Rainbow分页解决方案        ExpireDate,
Rainbow分页解决方案        Description
Rainbow分页解决方案    
FROM 
Rainbow分页解决方案        rb_Announcements_st
Rainbow分页解决方案    
WHERE
Rainbow分页解决方案        ModuleID 
= @ModuleID
Rainbow分页解决方案      
AND
Rainbow分页解决方案        ExpireDate 
> GETDATE()
Rainbow分页解决方案    
ORDER BY CreatedDate DESC
Rainbow分页解决方案
Rainbow分页解决方案
SELECT @FirstRec = (@Page - 1* @RecordsPerPage
Rainbow分页解决方案
SELECT @LastRec = (@Page * @RecordsPerPage + 1)
Rainbow分页解决方案
Rainbow分页解决方案
SELECT *, (SELECT COUNT(*FROM #TempItems) RecordCount
Rainbow分页解决方案
FROM #TempItems
Rainbow分页解决方案
WHERE ID>@FirstRec AND ID<@LastRec
Rainbow分页解决方案
Rainbow分页解决方案
SET NOCOUNT OFF
Rainbow分页解决方案
END
Rainbow分页解决方案
Rainbow分页解决方案
GO
Rainbow分页解决方案

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

Rainbow分页解决方案        public DataSet GetAnnouncementsPaged(int moduleID, WorkFlowVersion version,int page, 
Rainbow分页解决方案
Rainbow分页解决方案
int perPageNumber) 
                myConnection.Close(); 
Rainbow分页解决方案             }
Rainbow分页解决方案            return myDataSet;
Rainbow分页解决方案        }

Rainbow分页解决方案

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

 


附件是几个模块分页的存储过程

相关文章:

  • 2021-05-17
  • 2021-04-01
  • 2022-12-23
  • 2021-09-13
  • 2021-10-13
  • 2021-10-25
  • 2022-03-06
  • 2022-12-23
猜你喜欢
  • 2021-08-17
  • 2022-12-23
  • 2021-05-19
  • 2021-06-26
  • 2021-11-17
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案