65.9K
CodeProject 正在变化。 阅读更多。
Home

PagerPanel

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.45/5 (4投票s)

2005年7月27日

3分钟阅读

viewsIcon

35060

downloadIcon

471

用于 Windows 窗体的简单数据分页控件。

引言

通常,我们需要向用户显示数据库中大型的表或视图列表。但是这样做会导致网络资源饱和(在分布式环境中)和用户界面崩溃。数据分页可以解决这个问题。它允许你以分段和有序的形式显示所有数据,从而更好地利用内存、网络资源并提高用户界面的响应速度。

PagerPanel 是一个简单的用户控件,允许我们在 Windows 窗体的任何列表控件中实现数据分页。PagerPanel 不在数据库中执行查询;它只显示相应的页面并生成访问它们的机制。

要求

为了使用 PagerPanel,我们必须有以下两件事

  1. 我们需要一个存储过程或方法,允许我们在数据库中进行分页查询,我们可以在其中定义要访问的页面和页面大小(每页显示的行数)。Jasmin Muharemovic这篇文章中对不同的存储过程方法进行了很好的数据分页分析。
  2. 我们还需要一个查询,提供关于查询结果中总页数的信息。这对于生成控件中的页面列表非常重要。

使用控件

PagerPanel 可以添加到 IDE 的工具箱中,并在设计时放置在窗体中。但是页面仅在运行时绘制。在设计时,绘制一个边缘以允许我们可视化其位置。

Private void PagerPanel_Paint(object sender, 
             System.Windows.Forms.PaintEventArgs e)
 {
  if(DesignMode)
  {
    Rectangle borderRect = 
       new Rectangle(this.ClientRectangle.Location, 
                          this.ClientRectangle.Size);
    borderRect.Width -= 1;
    borderRect.Height -= 1;
    e.Graphics.DrawRectangle(SystemPens.ControlDark, 
                                         borderRect);
  }

方法 CreaNavegacion 生成查询返回的页面列表。此方法有两个参数 totalPages(int)currentPage(int)。参数 totalPages 表示查询返回的总页数,该页数在查询本身中获得。参数 currentPage 是我们要显示的页面。在我们的示例中,它用于启动新的查询。

private void btnSearch_Click(object sender, 
                               System.EventArgs e)
 {
  ...
  this.panel.CreaNavigacion(Busca(1),1);
 }

我的窗体中的 Busca 方法用于获取特定页面的查询,并在 DataGrid 控件中显示它,此外,它还返回查询返回的页数,这对于在 PagerPanel 中生成页面是必需的。

第二步是实现 OnPanelLinkClicked 事件,当用户单击控件创建的任何链接或页面时,将执行此事件。此事件通过参数为我们提供所选的页面,这是我们必须在数据库中查询的页面。在我们的示例中,我们通过以下方式执行此操作

private void OnPanelLinkClicked(object sender,
   PagerPanel.PagerPanel.PanelLinkClickedEventArgs e)
{
  this.panel.TotalPages = Busca(e.Page);
}

注意:要运行演示项目,您必须编译源代码附带的 spDataPaging 存储过程脚本。

关注点

PageBuffer 属性允许我们定义面板每次将显示的页数。如果 PageBuffer 小于查询结果中的页数,则将显示此符号 << < > >> 以用于列表中页面的导航。此属性的默认值为 10,但可以根据我们的要求进行修改。此外,LinkSpace 属性允许我们定义导航器中每个链接之间的空间。

LinkColor 属性定义控件中显示的链接或页面的颜色。

我希望这个控件对您有用。欢迎随意自定义它并在您的项目中使用它。

历史

  • 2005/07/27 - 1.0.0.1 - 初始版本。
© . All rights reserved.