1

我正在尝试对数据进行分页。基本上我正在获取数据并希望在多页上显示它。但它不起作用。我正在使用 Asp.net 和 C# 进行编码。我正在使用 mysql 作为数据库。

代码如下: ASP代码

<asp:DataGrid runat="server" ID="RestData"
     AllowPaging="True" PageSize="2" 
     OnPageIndexChanged="RestData_PageIndexChanged" AllowCustomPaging="True" 
     PagerStyle-Wrap="False">
     <PagerStyle />
</asp:DataGrid>

C#代码:

protected void Page_Load(object sender, EventArgs e)
 {
    BindData();
 }
public void BindData()
    {
     RestData.DataSource = call.GetReader(Convert.ToInt32(AreaData.SelectedValue));  
       //GetReader is function which returns the data reader of mysql 
     RestData.DataBind();
    }
protected void RestData_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
       RestData.CurrentPageIndex = e.NewPageIndex;
        BindData();
   }

输出:它显示两行(因为我给了pagesize 2)。但我看不到下一页。查询应该返回超过 2 行(当我使用中继器时确实会发生这种情况,但我无法在其中进行分页。

请提供一些解决方案(我无法用这个论坛中的任何其他解决方案解决我的问题,所以我创建了新的解决方案)

提前致谢。

4

6 回答 6

1

尝试添加

If(! IsPostBack)
{
   BindData();
}

有一个类似于您在此处的DataGrid custom paging的示例

下面的部分更适合Gridview而不是DataGrid

您应该订阅PageIndexChanging而不是PageIndexChanged事件。

PageIndexChanging当您单击其中一个分页按钮并且在网格处理分页操作之前发生

而 PageIndexChanged 是发布操作。

另外我会检查绑定数据的页面加载

于 2012-05-23T12:31:42.987 回答
1

当您尝试更改页面时,DataGrid 必须知道该怎么做。

在您的网格中(示例来自我在 VB 中的项目,抱歉):

 <asp:DataGrid ID="MainGrid"
    OnEditCommand="MainGrid_Edit"
    OnCancelCommand="MainGrid_Cancel"
    OnUpdateCommand="MainGrid_Update"
    runat="server"
    AutoGenerateColumns="False"
    AllowSorting="True"
    CssClass="DistPortalDataGrid"
    AllowPaging="True"
    CellPadding="3"
    PageSize="25" 
    onpageindexchanging="MainGrid_PageIndexChanged"
    ....

注意最后一行...

现在转到代码视图并创建以下子:

Protected Sub MainGrid_PageIndexChanged(source As Object, e As DataGridPageChangedEventArgs) Handles MainGrid.PageIndexChanged
    MainGrid.CurrentPageIndex = e.NewPageIndex
    BindMainGrid() 'rebinds the grid
End Sub

正如Rajuu Parmar所指出的,DataGrid没有.PageIndex属性。这是对的。DataGrid 的等效属性是.CurrentPageIndex. 为什么微软让它们与众不同,我不知道。虽然您解决了问题(从日期算起几年前),但我希望您或其他人发现这很有用。

于 2015-06-08T17:40:14.633 回答
0

您还需要通过执行以下操作来告诉网格总共有多少项目:

public void BindData() {
    RestData.VirtualItemCount = CountTotalItemsInDb();
    // ... the rest ....
}
于 2012-05-23T12:32:43.683 回答
0

数据网格上的分页不起作用的原因是因为您创建了“受保护”方法并且它无法访问它。如果代码更改为下面,它会工作。希望对有需要的人有所帮助。

public void RestData_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
       RestData.CurrentPageIndex = e.NewPageIndex;
        BindData();
   }
于 2015-09-22T20:13:13.840 回答
-1

尝试这个。

protected void G_BgtPersonnel_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    //Next page in the GridView
    G_BgtPersonnel.PageIndex = e.NewPageIndex;
    BindgrdPersonnal();
}
于 2012-05-23T12:31:21.530 回答
-1

谢谢你的帮助。我得到了解决方案。如果将来有人需要,只需发布​​解决方案。最后我得到了GridView的解决方案。它确实进行分页。

ASP 代码

<asp:GridView ID="RestGridData" runat="server"
     AllowPaging="True"  AutoGenerateColumns="False"
     PageSize="2" onpageindexchanging="RestGridData_PageIndexChanging">
  </asp:GridView> 

客户服务代码

protected void Page_Load(object sender, EventArgs e)
    {
       GridBindData(); // on page load 
    }
public void GridBindData()
    {
        MySqlConnection Conn; // I am using MySql 
        myConn = new MySqlConnection("server=localhost;user=root;database=DBName;");
        conn.Open();
        MySqlCommand cmd = new MySqlCommand("Select Name, address, mobileNo, emailID from  user", conn);
         MySqlDataReader reader = cmd.ExecuteReader();
        // As DataReader can move only in forward it is not useful to use it GridView.
       // So convert it to DataTable(or?). It can move in both direction

        DataTable dTable = new DataTable();
        dTable.Load(reader); // ASP function to convert reader to DataTable

        RestGridData.DataSource = dTable; 
        RestGridData.DataBind();

    }
protected void RestGridData_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        RestGridData.PageIndex = e.NewPageIndex;
        GridBindData();
    }
于 2012-05-24T06:06:50.123 回答