【问题标题】:Invalid CurrentPageIndex value. It must be >= 0 and < the PageCountCurrentPageIndex 值无效。它必须 >= 0 并且 < PageCount
【发布时间】:2020-04-15 05:35:52
【问题描述】:

我想绑定我的数据 Gridview,但它会引发错误。 当我点击新页面时我允许分页,例如 1.2.3 然后上面的错误抛出 这是我的代码。 一个是页面索引更改,另一个是我的 BindGrid 方法。 当我单击一个新页面 2 或 3 等时出现错误

更新代码

 protected void DataGrid1_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
    {

        DataGrid1.CurrentPageIndex = e.NewPageIndex;
        DataGrid1.DataSource = Session["data"] as DataTable;
        DataGrid1.DataBind();
    }
    private void BindGrid()
    {
        DataTable data = storedProcedureManager.sp_inactiveFiles(
                providerID,
                 days, CaseTypeID, CollectorID, user.UserRegID);
        lblMsg.Text = data.Rows.Count + " Record's Found.";
        log.Info(lblMsg.Text);
        Session["data"] = data;
        DataGrid1.DataSource = data;
        DataGrid1.DataBind();

        log.Info("Report Displayed.");

    }

【问题讨论】:

  • 什么是 e.NewPageIndex 值?是否小于页数?
  • 这是在另一个相同错误的帖子中添加的,所以我也把它放在这里,但失败了

标签: asp.net datagridview


【解决方案1】:

问题是当您在 BindGrid() 方法中再次获取数据时,您必须获得更少的页面数。因此您可以做两件事。

1)如果您要过滤数据,则将页面索引重置为 1。

protected void DataGrid1_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
    {

        BindGrid();
    }
private void BindGrid()
    {
        DataTable data = storedProcedureManager.sp_inactiveFiles(
                providerID,
                 days,CaseTypeID,CollectorID,user.UserRegID);
        lblMsg.Text = data.Rows.Count + " Record's Found.";
        log.Info(lblMsg.Text);

        DataGrid1.DataSource = data;
        DataGrid1.CurrentPageIndex = 0;
        DataGrid1.DataBind();

        log.Info("Report Displayed.");

    }

2)如果您不过滤数据,则将数据网格值存储在会话对象中,并将其用于分页。

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

  }
protected void DataGrid1_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
    {
        DataGrid1.CurrentPageIndex = e.NewPageIndex;
        DataGrid1.DataSource = Session["value"] as DataTable;
        DataGrid1.DataBind();
    }
private void BindGrid()
    {
        DataTable data = storedProcedureManager.sp_inactiveFiles(
                providerID,
                 days,CaseTypeID,CollectorID,user.UserRegID);
        lblMsg.Text = data.Rows.Count + " Record's Found.";
        log.Info(lblMsg.Text);
        Session["value"]=data;
        DataGrid1.DataSource = data;
        DataGrid1.DataBind();

        log.Info("Report Displayed.");

    }

【讨论】:

  • Session["value"] 是用于保存数据的会话对象。您可以在整个会话期间使用此对象。了解会话检查this
  • DataGrid1_PageIndexChanged 将是一个回发。如果你在里面写你的代码 (!IsPostBack),你的代码就没用了。
  • 我认为我的第二个解决方案对你有用。检查第二个解决方案
  • 会话中的值你的意思是数据gridview的所有列? ?
  • 是的。您的整个数据表都保存在会话中
【解决方案2】:
DataGrid1.DataSource = data;
DataGrid1.DataBind();
DataGrid1.CurrentPageIndex = 0;

页面绑定后将CurrentPageIndex重置为0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2017-01-19
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多