GridView在GridView_PageIndexChanging事件中不显示

5

我有一个面板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>

代码 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();
    }
}

现在开始实施分页

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

它确实能够工作,但只有部分功能。它可以进行分页并正确地显示数据。但是,问题在于当我点击页面“2”时,面板会像我上传的图片所示一样变空白,然后我点击链接按钮,它会将我重定向回面板,并打开带有有效数据的网格视图的第二页。

如何解决这个问题?


现在你可以再次聊天了;-) - Klaus Byskov Pedersen
3个回答

2
  1. Extract the logic which binds the GridView to data into a new method.You can call it BindData() for example:

    private void BindData()
    {
        using (SqlConnection con = new SqlConnection(cs))
        {
            sdastockview.fill(dtstockview);
            gridview_stock.datasource = dtstockview;
            gridview_stock.databind();
        }
    }
    
  2. Call this method inside LinkButton_Panel_ViewStock_Click to populate the GridView:

    protected void LinkButton_Panel_ViewStock_Click(object sender, EventArgs e)
    {
        this.BindData();
    }
    
  3. Lastly, call it again to re-populate the GridView during paging:

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

只需进行这三个小改动,它就可以正常工作。我已在我的端上尝试过,它完全正常运行。


谢谢,它像魔法一样有效!:) <3 你是个牛人,伙计!而且我不是同性恋!哈哈 :P - ARr0w

0

在填充DataSet后,将其保存在某个地方,例如ViewState上的LinkButton_Panel_ViewStock_Click中,如下所示:

ViewState["ds"] = dtStockView

PageIndexChanging中编写如下内容:

protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    panel_ViewStock.visible = true;
    GridView_Stock.PageIndex = e.NewPageIndex;
    GridView_Stock.DataSource = ViewState["ds"] as DataSet
    GridView_Stock.DataBind();
}

希望这能对你有所帮助。

兄弟,它没起作用,问题还是一样的。我心中的情景是,在点击页面更改事件时,它会重新加载页面,但不会打开此视图库存面板。有3个面板。 (1)添加股票 (2)更新股票 (3)查看股票这就是我在页面加载时拥有的内容在页面加载时,“如果(!ispostback){panel_updatestock.visible = false; panel_ViewStock.visible = false;}” - ARr0w
我也试了修改后的答案,但它没有起作用。不过还是谢谢你花时间和帮助 <3。非常感激 ^-^。因为 Denis Wessels 的逻辑起作用了! :) - ARr0w

0

你可以尝试使用:

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接