GridView不在GridView_PageIndexChanging上显示

ARr*_*r0w 5 c# asp.net paging gridview

我有一个面板ViewStock,我在数据库中查看gridview,通过代码查看DataBind().在html中的gridview标记中允许分页和创建事件"OnPageIndexChanging",实现上面定义的代码并在事件中进行分页,如下所示:

HTML:

<asp:Panel ID="Panel_StockView" runat="server">

    <asp:GridView ID="GridView_Stock" AllowPaging="true" OnPageIndexChanging="GridView_PageIndexChanging" runat="server"></asp:GridView>

</asp:Panel>
Run Code Online (Sandbox Code Playgroud)

代码C#:

protected void LinkButton_Panel_ViewStock_Click(object sender, EventArgs e)
{
    using(SqlConnection con = new SqlConnection(cs))
    {
        //Sql command here
        /sql adapter and filled datatable
        sdaStockView.Fill(dtStockView);
        GridView_Stock.DataSource = dtStockView;
        GridView_Stock.DataBind();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在是已实施的分页

protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView_Stock.DataBind();
    GridView_Stock.PageIndex = e.NewPageIndex;
}
Run Code Online (Sandbox Code Playgroud)

它确实有效但部分有效.它执行分页并正确地执行数据.但是,问题是当我点击页面'2'时面板就像我上传的图片一样空白看到这个图像,然后我点击链接按钮再次将我重定向到面板并打开页面'2' gridview包含有效数据.

如何解决这个问题?

Den*_*els 2

  1. 将 GridView 与数据绑定的逻辑提取到一个新方法中。您可以调用它,BindData()例如:

    private void BindData()
    {
        using (SqlConnection con = new SqlConnection(cs))
        {
            sdastockview.fill(dtstockview);
            gridview_stock.datasource = dtstockview;
            gridview_stock.databind();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在内部调用此方法LinkButton_Panel_ViewStock_Click来填充GridView

    protected void LinkButton_Panel_ViewStock_Click(object sender, EventArgs e)
    {
        this.BindData();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,再次调用它以重新填充GridView分页期间:

    protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView_Stock.PageIndex = e.NewPageIndex;
        this.BindData();
    }
    
    Run Code Online (Sandbox Code Playgroud)

只要做这三个小改变就可以了。我已经在我这边尝试过了,效果很好。