我有一个Gridview
,我想设置分页
。到目前为止我已经:
<asp:GridView ID="grdActivity"
runat="server"
AutoGenerateColumns="False"
AllowPaging="True"
PageSize="30"
OnPageIndexChanging="gridView_PageIndexChanging">
后面的C#代码是:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dsActivity myDataSet = new dsActivity();
myDataSet = clsDataLayer.GetActivity(Server.MapPath("DB.mdb"));
grdActivity.DataSource = myDataSet.Tables["tblActivity"];
grActivity.DataBind();
}
}
protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grdActivity.PageIndex = e.NewPageIndex;
grdActivity.DataBind();
}
我没有收到任何错误,但当我按任何其他页面(2 及以上)时,什么也没有显示,只有一个空白页面,并且 GridView 消失。我错过了什么吗?我看到数百页显示了执行此操作的确切代码。
最佳答案
您将需要重新分配数据源属性。回发后 grActivity.DataSource 为 null,对其调用 DataBind 将清除网格。
protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
//re-assign your DataSource
dsActivity myDataSet = new dsActivity();
myDataSet = clsDataLayer.GetActivity(Server.MapPath("DB.mdb"));
grdActivity.DataSource = myDataSet.Tables["tblActivity"];
//Set the new page index
grdActivity.PageIndex = e.NewPageIndex;
//apply your changes
grdActivity.DataBind();
}
一些注意事项:
您应该考虑重构代码,将数据带入在 Page_Load 上和 gridview_PageIndexChanging 内调用的单个方法中(请参阅 @ekad 的答案)
如果您有大量数据,您应该考虑直接在数据库上对数据进行分页。现在,如果您的表有 500 行,则所有行都将加载到数据集中,即使只有一小部分(页面大小)将显示在网格中
关于c# - ASP.NET 中 GridView 的分页(不会转到第 2,3 页等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21494297/