5

我有一个 gridview,它的 DataSourceID 属性设置为自定义 ObjectDataSource 对象。当 AllowPaging 设置为 True 时,GridView 在回发后消失。如果我将 AllowPaging 设置为 False 就可以了。有人可以为我解释一下吗?:)

编辑:我感到困惑的另一件事是,我认为如果您设置DataSourceID,网格将在需要时从数据源获取数据。如果网格因为没有保存数据而消失,为什么 gridview 没有从数据源获取它需要的数据?

4

2 回答 2

4

回发发生后,可能没有维护或重新填充数据源,并且没有项目可以填充网格。启用分页时,您是否正确处理数据源对象的状态(重新绑定/保持源活动)?

这听起来可能是一个模糊的答案,但如果没有说明来源如何获取数据的示例,就很难诊断为什么这些项目会消失。

编辑:
我想的方法是回调分页/排序。但是我确实找到了一些关于 ODS 和分页的信息。确保您已设置以下内容:

  1. GridView:AllowPaging,当然你需要设置PageSize。
  2. ObjectDataSource:EnablePaging,还需要设置:
    • MaximumRowsParameterName="maxRows"
    • StartRowIndexParameterName="startRowIndex"
    • SelectCountMethod="记录计数"

如果您想手动处理分页大小等,我认为您只需要设置第 2 项的 3 个子项。

然后你可以在这里阅读更多。

于 2009-02-24T22:58:58.087 回答
0

为了回答@adam0101 的更多回复,我认为他的意思是“......事实证明我的自定义数据源为记录计数返回零。”,是您可能需要将数据源“重新附加”到 gridview . ASP.net 自动知道您正在检索记录-'n',其中'n' 是下一页的第一行。此解决方案更适用于您不想让 asp.net自动处理数据的情况在您的 gridview 中,可能是由于想要在另一个事件(例如 LOAD DATA 按钮)之后加载数据,而不是在第一次加载页面时。但正如亚当在下面提到的,真正的原因是他“......创建了一个继承 ObjectDataSource 的数据源子类,但它的实现不正确。”。对不起我的假设亚当。谢谢

但是,我认为我的其余解决方案适用于那些坚持使用手动派生数据源的人。

IE

按照上述设置您的 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);
}

为了完成这个答案,这是我的代码,我在需要时加载数据 - 而不是在触发 PostPack 时,这是默认设置......

    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
        }
于 2015-08-26T04:38:43.173 回答