GridView.PageSize在第一页加载时设置为默认值10

时间:2009-10-21 16:35:26

标签: c# asp.net gridview pageload

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

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

我不确定为什么gridView的pagesize在第一次没有生效。我应该在Page_Load以外的其他事件中设置pagesize。此外,我总是设置它,即使它是一个回发。我正在使用内部Web服务器运行该页面。有什么想法发生了吗?

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

  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"]); } 
    }

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

试试这个

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

另请注意,如果您正在运行ASP.NET 3.5项目,则可以使用DataPager控件扩展GridView,Matt Berseth开发了一个示例here

答案 2 :(得分:0)

设置Pagesize后缺少PageBind方法。添加它和它的一切工作正常。 我在设置PageSize之前绑定了控件,我猜这个值在第一次被保存后被用于Postback,但不是第一次。

感谢Jason Berkan指出这一点。