2

この関数を Load Form で実行して、データベースから c# の dataGridView に情報を表示しています。問題は、データにアクセスしてデータを取得しようとする前に、フォームがポップアップすることです。デバッガで実行する方法は次のとおりです。以下の関数を実行します。

public void loadData()
{
    var list = mysql.Select();
    try
    {
        //start from first row
        for (int i = 0; i < dataGridView1.RowCount; i++)
        {
            //insert IDs
            dataGridView1[0, i].Value = list[0][i];
            //insert Names
            dataGridView1[1, i].Value = list[1][i];
            for (int j = 0; j < dataGridView1.ColumnCount; j++)
            {
                if (list[3][j] != null)
                {
                    dataGridView1[j + 2, i].Value = list[3][j];
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

次に、mysql クラスで Select 関数を呼び出し、MySqlDataReader で停止して、ウィンドウ フォームをポップアップします。誰かが何が起こっていたのか教えてもらえますか?

ここに Mysql.Select() があります

public List <string> [] Select()
{
    string query = "SELECT id,name,weekday,description FROM employee e INNER JOIN schedule s ON e.id=s.id";

    //Create a list to store the result
    List<string>[] list = new List<string>[4];
    list[0] = new List<string>();
    list[1] = new List<string>();
    list[2] = new List<string>();
    list[3] = new List<string>();

    //Open connection
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Create a data reader and Execute the command
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            list[0].Add(dataReader["id"] + "");
            list[1].Add(dataReader["name"] + "");
            list[2].Add(dataReader["weekday"] + "");
            list[3].Add(dataReader["description"] + "");
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();

        //return list to be displayed
        return list;
    }
    else
    {
        return list;
    }
}
4

1 に答える 1

3

MySQL コマンドを処理し、データベースから情報を取得している間、アプリケーションはフォームをペイントする時間が与えられたようです。

簡単な修正は、次のようにすることです。

    private void frmMain_Load(object sender, EventArgs e)
    {
          this.visible = false;
          loadData();
          this.visible = true;
    }
于 2013-02-19T01:43:55.690 に答える