DataGrid.AllowCustomPaging 属性

定义

获取或设置指示是否启用自定义分页的值。Gets or sets a value that indicates whether custom paging is enabled.

public:
 virtual property bool AllowCustomPaging { bool get(); void set(bool value); };
public virtual bool AllowCustomPaging { get; set; }
member this.AllowCustomPaging : bool with get, set
Public Overridable Property AllowCustomPaging As Boolean

属性值

如果启用自定义分页,则为 true;否则为 falsetrue if custom paging is enabled; otherwise, false. 默认值是 falseThe default value is false.

示例

下面的代码示例演示如何使用 AllowCustomPaging 属性启用自定义分页。The following code example demonstrates how to use the AllowCustomPaging property to enable custom paging.

<%@ Page Language="C#" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

   <script runat="server">

      // Normally, an entire data source is loaded in the DataGrid control, 
      // which can take up a lot of resources. This example uses custom 
      // paging, which loads only the segment of data needed to fill a
      // single page. In order to query for the appropriate segment of
      // data, the index of the first item displayed on a page must be
      // tracked as the user navigates between pages.
      int startIndex = 0;

      ICollection CreateDataSource() 
      {

         // Create sample data for the DataGrid control.
         DataTable dt = new DataTable();
         DataRow dr;

         // Define the columns of the table.
         dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
         dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
         dt.Columns.Add(new DataColumn("DateTimeValue", typeof(string)));
         dt.Columns.Add(new DataColumn("BoolValue", typeof(bool)));

         // Populate the table with sample values. When using custom paging,
         // a query should only return enough data to fill a single page, 
         // beginning at the start index.
         for (int i = startIndex; i < (startIndex + MyDataGrid.PageSize); i++) 
         {
             dr = dt.NewRow();

             dr[0] = i;
             dr[1] = "Item " + i.ToString();
             dr[2] = DateTime.Now.ToShortDateString();
             dr[3] = (i % 2 != 0) ? true : false;

             dt.Rows.Add(dr);
         }

         DataView dv = new DataView(dt);
         return dv;

      }

      void Page_Load(Object sender, EventArgs e) 
      {

         // Load sample data only once, when the page is first loaded.
         if (!IsPostBack) 
         {

            // Set the virtual item count, which specifies the total number
            // items displayed in the DataGrid control when custom paging
            // is used.
            MyDataGrid.VirtualItemCount = 200;

            // Retrieve the segment of data to display on the page from the
            // data source and bind it to the DataGrid control.
            BindGrid();

         }

      }

      void MyDataGrid_Page(Object sender, DataGridPageChangedEventArgs e) 
      {

         // For the DataGrid control to navigate to the correct page when
         // paging is allowed, the CurrentPageIndex property must be updated
         // programmatically. This process is usually accomplished in the
         // event-handling method for the PageIndexChanged event.

         // Set CurrentPageIndex to the page the user clicked.
         MyDataGrid.CurrentPageIndex = e.NewPageIndex;

         // Calculate the index of the first item to display on the page 
         // using the current page index and the page size.
         startIndex = MyDataGrid.CurrentPageIndex * MyDataGrid.PageSize;

         // Retrieve the segment of data to display on the page from the 
         // data source and bind it to the DataGrid control.
         BindGrid();

      }

      void BindGrid() 
      {

         MyDataGrid.DataSource = CreateDataSource();
         MyDataGrid.DataBind();

      }

   </script>

<head runat="server">
    <title> DataGrid Custom Paging Example </title>
</head>
<body>

   <form id="form1" runat="server">
 
      <h3> DataGrid Custom Paging Example </h3>

      <asp:DataGrid id="MyDataGrid" 
           AllowCustomPaging="True" 
           AllowPaging="True" 
           PageSize="10" 
           OnPageIndexChanged="MyDataGrid_Page" 
           runat="server">

         <HeaderStyle BackColor="Navy" 
                      ForeColor="White" 
                      Font-Bold="True" />

         <PagerStyle Mode="NumericPages" 
                     HorizontalAlign="Right" />

      </asp:DataGrid>

   </form>

</body>
</html>

<%@ Page Language="VB" AutoEventWireup="True" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

   <script runat="server">

      ' Normally, an entire data source is loaded in the DataGrid control, 
      ' which can take up a lot of resources. This example uses custom 
      ' paging, which loads only the segment of data needed to fill a
      ' single page. In order to query for the appropriate segment of
      ' data, the index of the first item displayed on a page must be
      ' tracked as the user navigates between pages.
      Dim startIndex As Integer = 0

      Function CreateDataSource() As ICollection 

         ' Create sample data for the DataGrid control.
         Dim dt As DataTable = New DataTable()
         Dim dr As DataRow

         ' Define the columns of the table.
         dt.Columns.Add(New DataColumn("IntegerValue", GetType(Int32)))
         dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
         dt.Columns.Add(New DataColumn("DateTimeValue", GetType(String)))
         dt.Columns.Add(New DataColumn("BoolValue", GetType(Boolean)))

         ' Populate the table with sample values. When using custom paging,
         ' a query should only return enough data to fill a single page, 
         ' beginning at the start index.
         Dim i As Integer         

         For i = startIndex To ((startIndex + MyDataGrid.PageSize) - 1) 

             dr = dt.NewRow()

             dr(0) = i
             dr(1) = "Item " & i.ToString()
             dr(2) = DateTime.Now.ToShortDateString()
             If (i Mod 2 <> 0) Then
                dr(3) = True
             Else
                dr(3) = False
             End If

             dt.Rows.Add(dr)

         Next i

         Dim dv As DataView = New DataView(dt)
         Return dv

      End Function

      Sub Page_Load(sender As Object, e As EventArgs) 

         ' Load sample data only once, when the page is first loaded.
         If Not IsPostBack Then 

            ' Set the virtual item count, which specifies the total number
            ' items displayed in the DataGrid control when custom paging
            ' is used.
            MyDataGrid.VirtualItemCount = 200

            ' Retrieve the segment of data to display on the page from the 
            ' data source and bind it to the DataGrid control.
            BindGrid()

         End If

      End Sub

      Sub MyDataGrid_Page(sender as Object, e As DataGridPageChangedEventArgs) 

         ' For the DataGrid control to navigate to the correct page when
         ' paging is allowed, the CurrentPageIndex property must be updated
         ' programmatically. This process is usually accomplished in the
         ' event-handling method for the PageIndexChanged event.

         ' Set CurrentPageIndex to the page the user clicked.
         MyDataGrid.CurrentPageIndex = e.NewPageIndex

         ' Calculate the index of the first item to display on the page 
         ' using the current page index and the page size.
         startIndex = MyDataGrid.CurrentPageIndex * MyDataGrid.PageSize

         ' Retrieve the segment of data to display on the page from the 
         ' data source and bind it to the DataGrid control.
         BindGrid()

      End Sub

      Sub BindGrid() 

         MyDataGrid.DataSource = CreateDataSource()
         MyDataGrid.DataBind()

      End Sub

   </script>

<head runat="server">
    <title> DataGrid Custom Paging Example </title>
</head>
<body>

   <form id="form1" runat="server">
 
      <h3> DataGrid Custom Paging Example </h3>

      <asp:DataGrid id="MyDataGrid" 
           AllowCustomPaging="True" 
           AllowPaging="True" 
           PageSize="10" 
           OnPageIndexChanged="MyDataGrid_Page" 
           runat="server">

         <HeaderStyle BackColor="Navy" 
                      ForeColor="White" 
                      Font-Bold="True" />

         <PagerStyle Mode="NumericPages" 
                     HorizontalAlign="Right" />

      </asp:DataGrid>

   </form>

</body>
</html>

注解

分页允许您在页面段中显示 DataGrid 控件的内容。Paging allows you to display the contents of the DataGrid control in page segments. 页面上的项数由 PageSize 属性确定。The number of items on a page is determined by the PageSize property. 如果没有为 PageSize 属性指定任何值,则 DataGrid 将在页面上显示10个项。If no value is specified for the PageSize property, the DataGrid will display 10 items on a page.

通常,每次 DataGrid 控件移动到不同页时,都将加载包含 DataGrid 控件中每一行的数据源。Normally, a data source that contains every row in the DataGrid control is loaded every time the DataGrid control moves to a different page. 当数据源非常大时,这可能会占用大量资源。This can consume a lot of resources when the data source is very large. 自定义分页允许只加载显示单个页面所需的数据段。Custom paging allows you to load just the segment of data needed to display a single page.

要启用自定义分页,请将 "AllowPaging" 和 "AllowCustomPaging" 属性都设置为 "true"。To enable custom paging, set both the AllowPaging and AllowCustomPaging properties to true. 接下来,提供处理 PageIndexChanged 事件的代码。Next, provide code to handle the PageIndexChanged event.

PageIndexChanged 事件处理程序的典型逻辑是首先将 CurrentPageIndex 属性设置为要显示的页的索引。The typical logic for the PageIndexChanged event handler is to first set the CurrentPageIndex property to the index of the page you want to display.

备注

事件处理程序接收作为参数的 DataGridPageChangedEventArgs 对象。The event handler receives a DataGridPageChangedEventArgs object as a parameter. 您可以使用此参数的 NewPageIndex 属性来确定用户从 DataGrid 控件的页选择元素中选择的页的索引。You can use the NewPageIndex property of this parameter to determine the index of the page selected by the user from the page selection elements of the DataGrid control.

接下来,创建一个数据源,其中包含要在单个页面上显示的数据,然后使用 DataBind 方法将数据绑定到 DataGrid 控件。Next, create a data source that contains the data to display on a single page and then use the DataBind method to bind the data to the DataGrid control.

备注

由于只加载一段数据,因此必须将 VirtualItemCount 属性设置为 DataGrid 控件中的总项数。Because only a segment of the data is loaded, you must set the VirtualItemCount property to the total number of items in the DataGrid control. 这允许控件确定显示 DataGrid 控件中的每一项所需的总页数。This allows the control to determine the total number of pages needed to display every item in the DataGrid control. 确定 DataGrid 控件中的总项数后,通常以编程方式设置此属性。This property is normally programmatically set once the total number of items in the DataGrid control is determined.

当通过将 AllowCustomPaging 属性设置为 false启用分页时,DataGrid 控件假设数据源包含所有要显示的项。When paging is enabled with the AllowCustomPaging property is set to false, the DataGrid control assumes that the data source contains all the items to be displayed. DataGrid 控件基于页索引(由 CurrentPageIndex 属性指定),计算所显示页上项的索引,以及由 PageSize 属性指定的页上的项数。The DataGrid control calculates the indexes of the items on the displayed page based on the page index, specified by the CurrentPageIndex property, and the number of items on a page, specified by the PageSize property.

AllowCustomPaging 属性设置为 true时,DataGrid 控件假设数据源仅包含由 VirtualItemCount 属性确定的项。When the AllowCustomPaging property is set to true, the DataGrid control assumes that the data source only contains the items as determined by the VirtualItemCount property. 将显示所有项,直至 PageSize 属性指定的项数。All items up to the number of items specified by the PageSize property are displayed.

适用于

另请参阅