0

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

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

我不确定为什么 gridView 的页面大小第一次没有生效。我是否应该在 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"]); } 
    }
4

3 回答 3

2

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

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

于 2009-10-21T16:59:53.390 回答
0

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

感谢 Jason Berkan 指出这一点。

于 2009-10-21T20:14:16.677 回答
0

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

像这样试试

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

还知道如果您正在运行 ASP.NET 3.5 项目,您可以通过扩展 GridView 来使用控件,这里DataPager有一个 Matt Berseth 开发的示例。

于 2009-10-21T17:30:31.270 回答