启用分页时,Gridview 在回发时消失
-
06-09-2019 - |
题
我有一个 gridview,其 DataSourceID 属性设置为自定义 ObjectDataSource 对象。当AllowPaging 设置为True 时,GridView 在回发后消失。如果我将AllowPaging 设置为False 就可以了。有人可以帮我解释一下吗?:)
编辑: 我感到困惑的另一件事是我认为如果你设置 数据源ID 网格会在需要时从数据源获取数据。如果网格因为不保存数据而消失,那么为什么 gridview 不从数据源获取所需的数据?
解决方案
回发发生后,数据源可能不会被维护或重新填充,并且没有项目可以填充网格。启用分页时,您是否正确处理数据源对象的状态(重新绑定/保持源活动)?
这听起来像是一个模糊的答案,但如果没有源如何获取数据的示例,就很难诊断为什么这些项目会消失。
编辑:
我想到的方法是回调分页/排序。不过我确实找到了一些关于 ODS 和寻呼的信息。确保您已设置以下内容:
- 网格视图:AllowPaging 当然你需要设置PageSize。
- 对象数据源:EnablePaging,还需要设置:
- 最大行参数名称=“最大行数”
- StartRowIndexParameterName=“startRowIndex”
- 选择计数方法=“记录计数”
我认为如果你想手动处理分页大小等,你只需要设置第2项的3个子项。
然后你可以阅读更多相关内容 这里.
其他提示
要回答更多@ adam0101的回应,有什么的我觉得他的意思“......原来,我的自定义数据源被返回的零记录计数。”是,你可能需要将数据源“的 的重新连接”到GridView。 ASP.net会自动知道你retriving记录及放”,其中‘n’是下一个页面的下一个第一排。该解决方案是更多的情况下,你不希望允许asp.net为在你的GridView自动处理数据后,也许是因为想另一个事件后加载数据(例如LOAD DATA按钮) ,而不是在页面加载的第一次。但正如亚当下面提到的真正原因是他“......曾经创造了继承的ObjectDataSource数据源的子类,但它是不正确的实现。”对不起,我假设有亚当。感谢
然而,我的解决方案的其余部分,我认为会为那些停留在手动使用导出的数据源工作。
即
设置你的GridView按上述方法及注意事项 - 没有一个DataSource属性!这是我的示例:
<asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server"
ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">
接下来做一个私有方法或程序,你可以永远当你需要强制GridView控件到一个新的页面时致电。
private void BindGridViewServer(GridView gv1)
{
gv1.DataSource = sdsStudents; //re-attach the datasource
gv1.DataBind(); //get a page of data AllowPaging must be true
}
接下来,创建方法OnPageIndexChanging
:
protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView myGV = (GridView)sender;
myGV.PageIndex = e.NewPageIndex;
BindGridViewServer(myGV);
}
为了完成这个答案的缘故,这里是我的代码时,我想,我加载数据 - 而不是当一个邮用被激发,这是默认......
protected void btnSEARCH(object sender, EventArgs e)
{
//some code
//bind the gridview to the datasource here and then bind!
gvStudents.DataSource = sdsStudents;
gvStudents.DataBind();
//more code etc
}