【问题标题】:Pagination of GridView in ASP.NET (Won't go to page 2,3, etc.)ASP.NET 中 GridView 的分页(不会转到第 2、3 页等)
【发布时间】:2014-02-24 23:42:03
【问题描述】:

我有一个Gridview,我想设置Pagination。到目前为止,我有:

<asp:GridView ID="grdActivity" 
              runat="server" 
              AutoGenerateColumns="False"  
              AllowPaging="True" 
              PageSize="30"     
              OnPageIndexChanging="gridView_PageIndexChanging">

后面的C#代码是:

protected void Page_Load(object sender, EventArgs e)
{
     if (!Page.IsPostBack)
     {
          dsActivity myDataSet = new dsActivity();

          myDataSet = clsDataLayer.GetActivity(Server.MapPath("DB.mdb"));

          grdActivity.DataSource = myDataSet.Tables["tblActivity"];

          grActivity.DataBind();
     }
}

protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
     grdActivity.PageIndex = e.NewPageIndex;
     grdActivity.DataBind();
}

我没有收到任何错误,但是当我按下任何其他页面(2 及以上)时,什么都没有显示,只是一个空白页面,GridView 消失了。我错过了什么吗?我看到数百页显示了执行此操作的确切代码。

【问题讨论】:

    标签: c# asp.net gridview pagination


    【解决方案1】:

    您需要重新分配数据源属性。回发后 grActivity.DataSource 为空,调用 DataBind 将清除网格。

    protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
         //re-assign your DataSource
         dsActivity myDataSet = new dsActivity();
         myDataSet = clsDataLayer.GetActivity(Server.MapPath("DB.mdb"));
         grdActivity.DataSource = myDataSet.Tables["tblActivity"];
    
         //Set the new page index
         grdActivity.PageIndex = e.NewPageIndex;
    
         //apply your changes
         grdActivity.DataBind();
    }
    

    一些注意事项:

    • 您应该考虑将代码重构为在 Page_Load 和 gridview_PageIndexChanging 中调用的单个方法(请参阅@ekad 的回答)

    • 如果您有大量数据,您应该考虑直接在数据库上分页数据。现在,如果您的表有 500 行,所有数据都将被加载到数据集中,即使只有一小部分(页面大小)会显示在网格中

    【讨论】:

      【解决方案2】:

      您好,请将代码保存在单独的方法中,并在页面加载事件和页面索引更改事件中调用它,例如

      protected void FillGrid()
      {          
          dsActivity myDataSet = new dsActivity();
      
          myDataSet = clsDataLayer.GetActivity(Server.MapPath("DB.mdb"));
      
          grdActivity.DataSource = myDataSet.Tables["tblActivity"];
      
          grActivity.DataBind();
      }
      

      并在页面索引更改事件中

      protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
      {
         grdActivity.PageIndex = e.NewPageIndex;
      
         FillGrid();    
      }
      

      在页面加载中!post back 事件中只需调用方法,就像

      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
           FillGrid();   
        }
      }
      

      【讨论】:

      • 感谢您的帮助!根据上面其他人所说的我需要如何重用代码,我找到了满足我需求的答案。
      • 是的,代码重用性的选择很好,你现在可以简单地在所有事件中调用这个方法,比如插入、更新、删除、取消和编辑。
      【解决方案3】:

      gridView_PageIndexChanging方法中调用grdActivity.DataBind()之前必须设置grdActivity的数据源。我还建议创建一个单独的方法以避免在 Page_LoadgridView_PageIndexChanging 中重复相同的代码

      protected void Page_Load(object sender, EventArgs e)
      {
          if (!Page.IsPostBack)
          {
              grdActivity.DataSource = GetDataSource();
              grdActivity.DataBind();
          }
      }
      
      private DataTable GetDataSource()
      {
          dsActivity myDataSet = new dsActivity();
          myDataSet = clsDataLayer.GetActivity(Server.MapPath("DB.mdb"));
      
          return myDataSet.Tables["tblActivity"];
      }
      
      protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
      {
          grdActivity.PageIndex = e.NewPageIndex;
      
          grdActivity.DataSource = GetDataSource();
          grdActivity.DataBind();
      }
      

      【讨论】:

        猜你喜欢
        • 2014-06-08
        • 1970-01-01
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多