ASP.NET - GridView пустой после перезагрузки страницы - PullRequest
0 голосов
/ 25 февраля 2019

Я использую базу данных 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>

Мой Query-метод из моего DB-класса:

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

    }
    catch
    {
        return null;
    }
}

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Пока ваш ответ работает, есть лучшая идиома, которую вы могли бы использовать.Поскольку 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();
    }
 }
0 голосов
/ 25 февраля 2019

Исправлено путем отладки, забыли закрыть 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();
 }

Надеюсь, я смогу кому-нибудь помочь с этим.

...