簡體   English   中英

ASP.NET-頁面重新加載后GridView為空

[英]ASP.NET - GridView empty after page reload

我正在使用MySQL數據庫存儲一些數據,我的ASP項目中有一個頁面,當您打開頁面作為標准結果時,該頁面應顯示整個表。

確實可以,但是只有一次,如果重新加載頁面或直接指向另一個頁面並返回,則GridView不會顯示。 與數據庫的連接仍然存在...這是我的代碼:

private Class.DB db;
protected void Page_Load(object sender, EventArgs e)
{
    this.db = (Class.DB)Session["DBConnection"];
    MySqlDataReader mdr = db.executeQuery(@"SELECT * FROM testtable;");
    GridDataView1.DataSource = mdr;
    GridDataView1.DataBind();
}

GridView:

<asp:GridView ID="GridDataView1" runat="server" EmptyDataText="No Data!">
</asp:GridView>

我的數據庫類的查詢方法:

public MySqlDataReader executeQuery(String command)
{
    try
    {
        MySqlCommand cmd = new MySqlCommand(command, this.conn);
        MySqlDataReader mdr = cmd.ExecuteReader();
        return mdr;

    }
    catch
    {
        return null;
    }
}

通過調試修復了該問題,在第一次綁定后忘記關閉DataReader。 代碼應為:

protected void Page_Load(object sender, EventArgs e)
{
    this.db = (Class.DB)Session["DBConnection"];
    MySqlDataReader mdr = db.executeQuery(@"SELECT * FROM testtable;");
    GridDataView1.DataSource = mdr;
    GridDataView1.DataBind();
    mdr.Close();
 }

希望我可以幫助某人。

當您的答案有效時,您可以使用更好的習慣用法。 由於MySqlDataReader繼承自IDisposable ,因此您可以編寫:

protected void Page_Load(object sender, EventArgs e)
{
    this.db = (Class.DB)Session["DBConnection"];
    using (MySqlDataReader mdr = db.executeQuery(@"SELECT * FROM testtable;")) 
    {
        GridDataView1.DataSource = mdr;
        GridDataView1.DataBind();
    }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM