【问题标题】:GridView.PageSize set to default 10 on 1st page loadGridView.PageSize 在第一页加载时设置为默认值 10
【发布时间】:2009-10-21 16:35:26
【问题描述】:

我正在使用 C#、.NET 3.5。我有一个带有动态绑定 DataSource 的 GridView 控件,并且我在 Page_Load 事件处理程序中动态设置了 PageSize。我在控件上设置了 AllowPaging = true。 GridView 分页工作正常,但是在 Page_Load 中设置的页面大小在第一次加载页面时不会生效。第一次加载页面时,无论我设置的 GridView.PageSize 属性如何(5、15 等),它将始终显示 10 行。在第一次(页面回发)之后,页面大小生效,一切都按预期工作。

页面大小是我从 appsettings 下的 web.Config 文件中获取的母版页的一个属性。

不知道为什么gridView的pagesize第一次没有生效。我是否应该在 Page_Load 以外的另一个事件中设置页面大小。另外,我总是设置它,即使它是回发。我正在使用内部 Web 服务器运行该页面。知道发生了什么吗?

后面的代码(GridView1.AllowPaging = true 在 aspx 页面上):

  protected void Page_Load(object sender, System.EventArgs e)
  {
                        DataView dvMembers = GetMembers;

                        GridView1.DataSource = dvMembers;   
                        GridView1.PageSize = Master.GridViewSize;
  }

母版页属性:

public int GridViewSize
    {
        get { return Convert.ToInt32 
                (ConfigurationManager.AppSettings ["memberDataGridPageSize"]); } 
    }

【问题讨论】:

    标签: c# asp.net gridview pageload


    【解决方案1】:

    子页面的 PageLoad 事件在母版页的 PageLoad 事件之前调用。因此,如果您在母版页 PageLoad 事件中设置Master.GridViewSize,则直到第二个 PostBack 才设置。

    最好在页面生命周期的早期加载 GridViewSize,然后将其存储在会话中。

    【讨论】:

    • Master.GridViewSize 是母版页的属性,不在 Page_Load 事件中设置。当我调试内容页面以在 Page_Load 事件处理程序中查看它的值时,它已经设置好了。所以我不认为这是问题所在。你认为我应该在什么事件中设置网格页面大小?
    • 如果该值是第一次设置的,那么这不是问题。如果对 PageSize 进行硬编码会怎样?
    • 另外,您对 GridView1.DataBind() 或 Page.DataBind() 的调用在哪里?
    • 嗨,Jason,GridViewBind 发生在 GetMembers 方法中,然后根据一些逻辑设置 pageSize。我现在在设置 Pagesize 及其工作后调用 Page.DataBind () 。感谢您的帮助。
    【解决方案2】:

    在您的 GridView 分页定义中是在第一次数据绑定时设置的,但如果发生回发,则不会在第二次设置。(默认情况下没有分页) 您需要在 aspx 页面上为 GridView 设置分页。

    这样试试

    <asp:GridView ID="GridView1" PageSize='<%$ AppSettings:memberDataGridPageSize %>' ..>
    

    另外知道如果你在运行 ASP.NET 3.5 项目,你可以使用 DataPager 控件扩展 GridView,有一个例子是 Matt Berseth 开发的 here

    【讨论】:

    • 我在 Page_load 事件处理程序中设置页面大小和数据源,无论它是否是回发。所以我不确定为什么第一次和回发之间会有不同。感谢您建议在 ASPX 代码本身中插入页面大小,但是当我在后面的代码中设置页面大小时,我想知道我当前的代码发生了什么。
    【解决方案3】:

    设置 Pagesize 后缺少 PageBind 方法。添加它并且一切正常。 我在设置 PageSize 之前绑定了控件,我猜该值在第一次之后被保存并随后在回发中使用,但不是第一次。

    感谢 Jason Berkan 指出这一点。

    【讨论】:

    • 欢迎接受这个答案,以便以后搜索这个问题的人可以轻松找到答案。
    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2016-12-19
    相关资源
    最近更新 更多