在 C# Asp.net 的数据网格中分页下一步不起作用
本文关键字:网格 分页 下一步 不起作用 数据网 数据 Asp net | 更新日期: 2023-09-27 18:35:00
我正在尝试对数据进行分页。基本上,我正在获取数据并希望在多个页面上显示它。但它不起作用。我正在使用 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();
}
输出:它显示两行(因为我给出了页面大小 2(。但我看不到下一页。查询应返回 2 行以上(当我使用中继器但无法在其中进行分页时确实会发生。
请提供一些解决方案(我无法使用任何其他解决方案解决我的问题在这个论坛中,所以我创建了一个新的(
提前谢谢。
尝试添加
If(! IsPostBack)
{
BindData();
}
有一个类似于此处的示例 DataGrid 自定义分页
以下部分更适合Gridview
而不是DataGrid
您应该订阅PageIndexChanging
而不是PageIndexChanged
活动。
其中一个分页按钮时和网格处理分页操作之前会发生PageIndexChanging
而PageIndexChanged是发布操作。
此外,我会检查绑定数据的页面加载
当您尝试更改页面时,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
属性。这是正确的。数据网格的等效属性是 .CurrentPageIndex
。为什么Microsoft使它们与众不同,我不知道。虽然您解决了问题(从日期开始的几年前(,但我希望您或其他人发现这很有用。
您还需要通过执行以下操作来告诉网格总共有多少项:
public void BindData() {
RestData.VirtualItemCount = CountTotalItemsInDb();
// ... the rest ....
}
数据网格上的分页不起作用的原因是您创建了"受保护"方法,并且它无法访问它。如果将代码更改为下面,它将起作用。希望它能帮助其他有需要的人。
public void RestData_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
RestData.CurrentPageIndex = e.NewPageIndex;
BindData();
}
感谢您的帮助。我得到了解决方案。只需发布解决方案如果将来有人需要。最后,我得到了GridView的解决方案。它确实执行分页。
ASP 代码
<asp:GridView ID="RestGridData" runat="server"
AllowPaging="True" AutoGenerateColumns="False"
PageSize="2" onpageindexchanging="RestGridData_PageIndexChanging">
</asp:GridView>
CS 代码
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();
}
试试这个。
protected void G_BgtPersonnel_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
//Next page in the GridView
G_BgtPersonnel.PageIndex = e.NewPageIndex;
BindgrdPersonnal();
}