【问题标题】:Paging Next in DataGrid in Asp.net C# Not Working在 Asp.net C# 中的 DataGrid 中分页下一步不起作用
【发布时间】:2012-05-29 23:49:43
【问题描述】:

我正在尝试对数据进行分页。基本上我正在获取数据并希望在多页上显示它。但它不起作用。 我正在使用 Asp.net 和 C# 进行编码。我正在使用 mysql 作为数据库。

代码如下: ASP 代码

<asp:DataGrid runat="server" ID="RestData"
     AllowPaging="True" PageSize="2" 
     OnPageIndexChanged="RestData_PageIndexChanged" AllowCustomPaging="True" 
     PagerStyle-Wrap="False">
     <PagerStyle />
</asp:DataGrid>

C#代码:

protected void Page_Load(object sender, EventArgs e)
 {
    BindData();
 }
public void BindData()
    {
     RestData.DataSource = call.GetReader(Convert.ToInt32(AreaData.SelectedValue));  
       //GetReader is function which returns the data reader of mysql 
     RestData.DataBind();
    }
protected void RestData_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
    {
       RestData.CurrentPageIndex = e.NewPageIndex;
        BindData();
   }

输出: 它显示两行(因为我给了 pagesize 2)。但我看不到下一页。 查询应该返回超过 2 行(当我使用转发器时确实会发生这种情况,但我无法在其中进行分页。

请提供一些解决方案(我无法用任何其他解决方案解决我的问题 在这个论坛中,所以我创建了一个新的)

提前致谢。

【问题讨论】:

  • 您是否尝试过使用PageIndexChanging 事件,这是您需要设置索引和绑定网格的地方。
  • 但是在 DataGrid 中,我找不到像 PageIndexChanging 这样的事件。
  • 不,你所做的只是正确的。它必须是 PageIndexChanged 而不是 PageIndexChanging
  • 您真的在做任何自定义分页...意味着自定义数据显示在您的页面中吗?如果没有,请从设计中删除您的 AllowCustomPaging="True"
  • 我遇到了同样的问题,在这里找到了解决方案,如果你采用这个代码,你可以让它工作stackoverflow.com/a/15685860/3966458

标签: c# asp.net datagrid paging page-index-changed


【解决方案1】:

尝试添加

If(! IsPostBack)
{
   BindData();
}

有一个类似于你在这里的例子DataGrid custom paging

下面的部分更适合Gridview而不是DataGrid

您应该订阅PageIndexChanging 而不是PageIndexChanged 事件。

PageIndexChanging 在您单击其中一个分页按钮并且在网格处理分页操作之前发生

当 PageIndexChanged 发布操作时。

我还会检查绑定数据的页面加载

【讨论】:

  • 您确定 DataGrid 存在事件 PageIndexChanging 吗?请在此处参考 DataGrid 类,如果您找到它,请告诉我。 msdn.microsoft.com/en-us/library/…
  • @Rahul 你能再读一遍吗?我也提到了同样的内容,并用删除线显示了该区域。
  • 是的,Vendetta 有 DataGrid 的 PageIndexChanged 事件,而 GridView 有 PageIndexChanged 和 PageIndexChanged 事件
【解决方案2】:

当您尝试更改页面时,DataGrid 必须知道该怎么做。

在您的网格中(示例来自我在 VB 中的项目,抱歉):

 <asp:DataGrid ID="MainGrid"
    OnEditCommand="MainGrid_Edit"
    OnCancelCommand="MainGrid_Cancel"
    OnUpdateCommand="MainGrid_Update"
    runat="server"
    AutoGenerateColumns="False"
    AllowSorting="True"
    CssClass="DistPortalDataGrid"
    AllowPaging="True"
    CellPadding="3"
    PageSize="25" 
    onpageindexchanging="MainGrid_PageIndexChanged"
    ....

注意最后一行...

现在转到代码视图并创建以下子:

Protected Sub MainGrid_PageIndexChanged(source As Object, e As DataGridPageChangedEventArgs) Handles MainGrid.PageIndexChanged
    MainGrid.CurrentPageIndex = e.NewPageIndex
    BindMainGrid() 'rebinds the grid
End Sub

Rajuu Parmar 所示,DataGrid 没有.PageIndex 属性。这是对的。 DataGrid 的等效属性是.CurrentPageIndex。为什么微软让它们与众不同,我不知道。虽然您解决了问题(从日期算起几年前),但我希望您或其他人会发现这很有用。

【讨论】:

    【解决方案3】:

    您还需要通过执行以下操作来告诉网格总共有多少项目:

    public void BindData() {
        RestData.VirtualItemCount = CountTotalItemsInDb();
        // ... the rest ....
    }
    

    【讨论】:

      【解决方案4】:

      在您的数据网格上分页不起作用的原因是您创建了“受保护”方法并且它无法访问它。 如果代码更改为下面,它会工作。希望对有需要的人有所帮助。

      public void RestData_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
          {
             RestData.CurrentPageIndex = e.NewPageIndex;
              BindData();
         }
      

      【讨论】:

        【解决方案5】:

        感谢您的帮助。我得到了解决方案。只是发布解决方案 如果将来有人需要。最后我得到了GridView的解决方案。它确实会分页。

        ASP 代码

        <asp:GridView ID="RestGridData" runat="server"
             AllowPaging="True"  AutoGenerateColumns="False"
             PageSize="2" onpageindexchanging="RestGridData_PageIndexChanging">
          </asp:GridView> 
        

        CS 代码

        protected void Page_Load(object sender, EventArgs e)
            {
               GridBindData(); // on page load 
            }
        public void GridBindData()
            {
                MySqlConnection Conn; // I am using MySql 
                myConn = new MySqlConnection("server=localhost;user=root;database=DBName;");
                conn.Open();
                MySqlCommand cmd = new MySqlCommand("Select Name, address, mobileNo, emailID from  user", conn);
                 MySqlDataReader reader = cmd.ExecuteReader();
                // As DataReader can move only in forward it is not useful to use it GridView.
               // So convert it to DataTable(or?). It can move in both direction
        
                DataTable dTable = new DataTable();
                dTable.Load(reader); // ASP function to convert reader to DataTable
        
                RestGridData.DataSource = dTable; 
                RestGridData.DataBind();
        
            }
        protected void RestGridData_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                RestGridData.PageIndex = e.NewPageIndex;
                GridBindData();
            }
        

        【讨论】:

          【解决方案6】:

          试试这个。

          protected void G_BgtPersonnel_PageIndexChanging(object sender, GridViewPageEventArgs e)
          {
              //Next page in the GridView
              G_BgtPersonnel.PageIndex = e.NewPageIndex;
              BindgrdPersonnal();
          }
          

          【讨论】:

          • DataGrid 中没有PageIndexChanging。参考 MSDN。
          猜你喜欢
          • 1970-01-01
          • 2018-10-27
          • 1970-01-01
          • 2016-01-16
          • 1970-01-01
          • 1970-01-01
          • 2011-06-15
          • 1970-01-01
          • 2015-02-18
          相关资源
          最近更新 更多