用于 ASP.NET的页导航控件

分享于 

14分钟阅读

Web开发

  繁體

pagerControl_pager_intro_1.gif

图 1 - ASP.NET 页导航控件

介绍

分页是每个网站开发人员都应该了解的重要内容。 在 ASP.NET 中,只有 DataGridGridView 支持分页。 在 ASP.NET 3.5中,微软为 ASP.NET 提供了第一个分离的分页控件,称为 DataPager。 但不幸的是它只支持对控件的分页,它们已经实现了 IPageableItemContainer 接口,如 ListView。 因此,我们仍然需要一个简单而有效的控件来对几乎任何类型的项目容器进行分页。

注意 ASP.NET: 虽然提供来源和示例项目按版本分类,但控件源代码来源在 ASP.NET 2.0和 ASP.NET 3.5项目中相同,控件的源代码管理源在项目中显示控件提供程序数据。
笔记 2: ASPnetPagerV2.8 现在不支持 ASP.NET 1.1.

分页系统需要什么以及它应该提供什么

我们应该提供给页面系统的重要内容:

  • 每页要显示多少项,或者 "pagesize"
  • 我所在的网页,或者 "currentindex"
  • 我有多少 items(records),或者 "itemcount"

页面系统预计提供的内容有:

  • 可以轻松浏览页面的准超链接( 参见图 1 )
  • 在当前页上显示的Items(results) ( 类似于可以绑定的数据集或者数据表)

它由哪些部分组成?

这个分页系统由以下部分组成,我将尝试解释它们:

第一部分的

从寻呼控件。查询数据库或者其他数据源获取所需参数的数据访问引擎。 同样,如果你使用 ASP.NET 3.5,也许你想用LINQ编写这部分,否则这部分是存储过程。

部分:

使用用户友好方式为我们生成超链接的页导航控件。 这些超链接将被用户用来浏览页面。

最后但不是最少:

最后,承载页导航控件并显示分页结果的网页。

部署和自定义页导航控件

一步一步地解释呼叫控制

1.编写你自己的业务特定存储过程或者LINQ查询

SQL Server 2000上的1.1 分页

让我从存储过程开始。 它附带了你可能已经下载的演示项目。 请看下面的屏幕截图:

( 你可以能希望更改过程 NAME,但不要忘记更改主机页中的过程 NAME )

如你所知,存储过程是业务特定对象,它的参数名强烈依赖于业务对象的名称。 因此,你应该定制它的一些变量。 为了让世界简单,当然对于你来说,我对我们有一个特别焦点的章节进行了深入的色彩。

若要修改存储过程以适应你的业务,请执行下列操作。 我们从底部开始:

  • 蓝色部分( 除了 RowNumber 语句) 表示要在网页上显示的输出列。 因此,首先在 RowNumber 语句后面写下你自己的表列。 例如假设你想要显示"pubs"数据库的"标题"。"价格"和"pubdate"列。 蓝色部分将更改为:
"SELECT RowNumber, Title, Price, PubDate"
  • 绿色部分意味着你的"选择逻辑"。 根据我们的例子,如果你没有 "WHERE"" 语句在查询中,绿色部分将更改为:
"SELECT Title, Price, PubDate FROM Titles"
  • 如果你必须使用 "WHERE"" 例如它将更改为:
"SELECT Title, Price, PubDate FROM Titles WHERE Price> 11"
  • 你可以使用其他的T-SQL语句对行进行排序。 你可以看到,在绿色部分,我使用了 ORDER BY"" 对结果进行排序的语句。 这是可选的,由你决定。 我们的示例中,可能希望通过 Title 对结果进行排序,因此我们将它的修改为:
"SELECT Title, Price, PubDate FROM Titles WHERE Price> 11 ORDER BY Title"
  • 好,粉红色部分是创建临时 table的过程的一部分,将蓝色( 除 RowNumber 节以外) 列添加到它的中。 在我们的示例中,粉色部分将更改为:
"Title varchar(80), Price money, PubDate datetime"
  • 最后一部分是 yellow 部分。 本节真正依赖第 2部分( 那个绿色的家伙)。 在我们的示例中,如果不使用 "WHERE"" 在绿色部分中,yellow 部分将成为:
"SELECT COUNT(*) FROM Pubs"
  • 如果我们用 "WHERE"" 在绿色部分,它将变成:
"SELECT COUNT(*) FROM Pubs WHERE Price> 11"

SQL Server 2005上的1.2 分页

SQL Server 2005支持通过以下方式在内部分页 ROW_NUMBER ( ) 函数请看下面的图:

在数据库中创建存储过程,并进行。

2.声明和自定义页导航控件

让我们看看如何使用它,以及它如何在我们的分页系统中发挥它的作用。 你可以通过控件的属性自定义页导航控件。 我已经将属性分为两个主要类别:

全球化

在 NAME 中显示,页导航控件中标题的语言可以使用以下属性进行更改。 让我们看看下面的屏幕截图:

默认语言是( en ),但你可以轻松更改这里属性以更改控件语言的页导航标题,甚至是像波斯语或者阿拉伯语这样的Unicode语言。 此外,还有一个名为RTL的属性,它将页导航控件的方向从 LeftToRight ( 默认值) 更改为 RightToLeft

行为

你可以在这里更改页导航控件的行为。 实际上,主要的定制在这里发生。

基本行为属性

  • PageSize
    获取或者设置一个值,该值指示每页应显示多少项
    默认值:15
  • CompactModePageCount
    获取或者设置指示在 compact 模式下应呈现多少页号的值
    例如:想象 CompactModePageCount =10,因这里当 CurrentIndex 低于 10时,页码计数( 寻呼超链接) 将是 10,否则页码的计数将等于 NormalModePageCount 值。
    默认值:10
  • NormalModePageCount
    获取或者设置一个值,该值指示在正常( 未压缩) 模式下应该呈现多少页号
    默认值:15
  • GenerateToolTips
    获取或者设置指示生成工具提示的值
    默认值:true
  • GenerateFirstLastSection
    获取或者设置一个值,该值指示是否生成第一个和最后一个节
    默认值:false
  • GeneratePagerInfoSection
    获取或者设置一个值,该值指示是否生成显示 CurrentIndex 和总页数信息的左侧大多数 table 单元格
    默认值:true
  • GenerateGoToSectionv2.8 feature
    获取或者设置一个值,该值指示生成节是否为
    默认值:false

SmartShortcuts属性

在 V2.0 中引入 SmartShortcuts,提高了效率,特别是在大规模数据场景中。 它们非常酷,并显示在 figure-1 中的灰色backgrounded单元格中。

  • GenerateSmartShortCuts
    获取或者设置一个值,该值指示生成智能快捷方式节
    默认值:true
  • MaxSmartShortCutCount
    获取或者设置指示最多可以生成多少个智能快捷方式的值
    默认值:6
  • SmartShortCutThreshold
    获取或者设置一个值,如果总页计数为 GREATER,则将生成 SmartShortcuts。
    默认值:30
  • SmartShortCutRatio
    获取或者设置SmartShortcut引擎将内部使用以处理计算的值。 推荐 3。
    默认值:3

隐藏超链接属性

在发布 PagerControl V2.0 之后,一些开发者联系了我并请求了。 我问他们为什么要上一个版本,我发现他们对第一个版本感兴趣,因为它是基于 QueryString 他们不想隐藏搜索引擎僵尸程序中的超链接。 因这里,为了拥有最好的两个世界,我想到了在隐藏容器中自动生成超链接的想法。 但是,在开发这里功能之前,出现了一个严重问题: "。隐藏文本对搜索引擎机器人可见",幸运的是,答案是"是"。

图1 显示了一个具有 Lynx的可见性测试
  • GenerateHiddenHyperlinksv2.8 feature

    获取或者设置一个值,该值指示是否生成隐藏超链接
    默认值:false

  • QueryStringParameterNamev2.8 feature
    获取或者设置 QueryString 在隐藏超链接中使用的参数 NAME 默认为: pagerControlCurrentPageIndex ( 强烈建议设置足够的名称)

查看操作 switch 中的超链接以及查看页面源的这里属性

3。主机网页

让我们继续并完成分页系统。 如你在演示项目中所看到的,我们有一个托管控件的网页( 中继器 用于重复结果和 寻呼机 如果用户请求该页面,我们将看到发生了什么情况:

protectedvoid Page_Load(object sender, EventArgs e)
{
 if (!Page.IsPostBack)
 {
 BindRepeater();
 }
}

如果用户单击指向naviaget的超链接,则 OnCommand 事件被激发,并且事件处理程序将被执行:

publicvoid pager_Command(object sender, CommandEventArgs e)
{
 int currnetPageIndx = Convert.ToInt32(e.CommandArgument);
 pager1.CurrentIndex = currnetPageIndx;
 BindRepeater();
}

获取分页结果 BindRepeater ( ) 方法应被调用:

privatevoid BindRepeater()
{
 string strConn = ConfigurationManager.ConnectionStrings[
 "northwindConnectionString"].ConnectionString;
 SqlConnection cn = new SqlConnection(strConn);
 SqlCommand Cmd = new SqlCommand("dbo.GetPagedProducts_sql2k5", cn);
 Cmd.CommandType = CommandType.StoredProcedure;
 SqlDataReader dr;
 Cmd.Parameters.Add("@PageSize", SqlDbType.Int, 4).Value = pager1.PageSize;
 Cmd.Parameters.Add("@CurrentPage", SqlDbType.Int, 4).Value = pager1.CurrentIndex;
 Cmd.Parameters.Add("@ItemCount", SqlDbType.Int).Direction = ParameterDirection.Output;
 cn.Open();
 dr = Cmd.ExecuteReader();
 rptProducts.DataSource = dr;
 rptProducts.DataBind();
 dr.Close();
 cn.Close();
 Int32 _totalRecords = Convert.ToInt32(Cmd.Parameters["@ItemCount"].Value);
 pager1.ItemCount = _totalRecords;
}

对控件的分页样式进行着色和自定义

希望一切都正常。 如果完成部署,让我们去定制控件的分页样式。 我已经创建了两个CSS样式表,可以用两种不同的方式对分页控件进行着色。

LightStyle.css: 为页导航控件( 推荐用于轻型 background 网页) 提供 below 样式。

DarkStyle.css: 为页导航控件( 推荐用于深色 background 网页) 提供 below 样式。

( 要按照首选方式定制控件样式,你应该在"样式"文件夹中操作样式表类)。

确认

启动 V2.8 与 ASP.NET 页导航控件的3rd 周年纪念重合。 我只是想感谢你给我的每个反馈。 我认为如果没有你的帮助,这个控制就不会。 如果你使用这里控件,并且你对它很满意,那么很好。 我很高兴你有一个特殊的特性,特性对我来说很重要,因为它们能帮助你增长。


历史记录

  • Sep,2008: V2.8
    新功能:隐藏超链接,GoTo部分,隐藏页导航信息部分的能力,独立性独立
    修正问题:页 postback Bug 解决后分页控件失去状态
  • Nov,2006: V2.0
    新特性:postback 方法,而非超链接,SmartShortcuts
  • Aug,2005: V1.0
    第一个版本

控制  asp  asp-net  Pager  
相关文章