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

DataGridView 中的数据分页。绑定模式

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (9投票s)

2009年4月17日

CPOL

2分钟阅读

viewsIcon

66239

downloadIcon

2192

如何在绑定模式下使用 DataGridView 分页

引言

大多数时候,我使用 .NET Framework 2.0 和它的 Windows 窗体 API。最广泛使用的控件之一是 DataGridView。但是,正如已经多次说过的,它缺少数据分页。互联网上有很多关于 DataGridView 中分页的文章。他们中的大多数都建议使用 DataGridView 虚拟模式。我将尝试在绑定模式中实现它。

背景

我一直在使用 Web 服务,这些服务需要大量使用 XML 数据,并且曾经必须为 Internet Explorer 实现嵌入式 .NET 控件,该控件应该在 DataGridView 控件中向用户显示大量数据列表。此外,用户应该能够过滤和排序显示的数据。对于有 100-300 行的列表没有问题。但是如果一个列表有 10000 - 20000 行,那就是另一种情况。使用 DataGridView 虚拟模式并没有解决过滤和排序的问题,所以其中一种解决方案是在绑定模式中实现缓存。

Using the Code

这段代码只是一个想法。所以你应该实现你自己的数据访问层。这意味着 Web 服务或访问本地数据库。你可以实现我错过的 IBindedListView 接口的功能。我使用 XML 请求作为页面提供程序的参数,但你可以实现你自己的实现来满足你的需求。

底层

在这个级别,我们将定义一个实体在我们的 DataGridView 中显示。让我们选择一个具有以下结构的公司列表

Create table Organizations 
(
ID int,
StateAbbr char(2),
StateName char(50),
OrganizationName char(150),
AgencyName char(150),
LocalPhone char(20)
);		

相应的 XML 元素将如下所示

<organization id="1" statename="Alaska" stateabbr="AK" />

相应的实体将如下所示

[XmlRoot(ElementName="Organization")]
    public class Organization
    {
        private int mID;
        private string mStateAbbr = String.Empty;
	  …

        [XmlAttribute("ID")]
        public int ID
        {
            get { return mID; }
            set { mID = value; }
        }

        [XmlAttribute("StateAbbr")]
        public string StateAbbr
        {
            get { return mStateAbbr; }
            set { mStateAbbr = value; }
        }
	  …
    } 		

所以我们可以反序列化它。

页面提供程序

我们应该设计一个基本接口来确定页面提供程序将如何检索相应的页面,以及如何过滤和排序数据

    public interface IPageProvider<t>
    {
        List<t> GetDataPage(int pageNumber, int rowsPerPage);
        string Filter { get; set;}
        string Sort { get; set;}
        int RowCount { get;}
    }		

缓存

缓存类将类似于 MSDN 文章中的类,唯一的区别是使用了 List<> 类而不是 DataTable 类。

CachedBindingListView

要使用我们的缓存作为 DataGridView 的数据源,我们应该实现 IBindingListView 接口。

服务器端

在服务器端,Web 服务将检索指定的数据页面并应用过滤和排序。为了演示它,我使用了 Microsoft Access 数据库并构造了 SQL 请求。

如何使用代码

  1. TestWebService 源代码放在某个文件夹中,例如 *C:\TestWebService*
  2. TestWinForm 源代码放在 *C:\TestWinForm* 中
  3. 运行 IIS
  4. 在默认网站上,创建 TestWebService 虚拟目录,使其源文件夹为 *C:\TestWebService* 文件夹
  5. 运行 TestWinForm 应用程序

链接

历史

  • 2009 年 4 月 17 日:初始发布
© . All rights reserved.