0

プログレスバーに問題があります。ボタン ( SELECT * FROM Table) があります。

クリックするとdatagridviewにデータを表示したい。大丈夫です、うまくいきます。

しかし、データが DB から読み取られている間、プログレス バーを作成する必要があります。

デフォルトでは、プログレス バーの表示は false にする必要があります。読み取り中 - 進行状況バーの表示は true です。

また、データが DB から読み取られると、プログレス バーの表示が再び false になるはずです。

私はコードを持っていますが、正しく動作しません (1. プログレス バーにバグがあるなど)。

 private void button3_Click(object sender, EventArgs e)
 {
    timer1.Start();         
 }

 private void timer1_Tick(object sender, EventArgs e)
 {
        progressBar1.Visible = true;
        progressBar1.Minimum = 10;
        progressBar1.Maximum = 100;

        progressBar1.Increment(+10);
        if (progressBar1.Value == 90)
        {         
            groupBox3.Enabled = true;
            connect con = new connect();
            DataTable data = connnection.query("SELECT * FROM User WHERE surname LIKE '" + textBox1.Text + "%'");
            dataGridView1.DataSource = tb;

        }
        if(progressBar1.Value == 100)
          progressBar1.Visible = false;
    }
4

1 に答える 1

1

ロジックを再考する必要があります。

その SQL 呼び出しを行うと、それをプログラムの外部で実行されているコードと見なすことができます。つまり、起動して終了するのを待つことしかできませんが、進行状況などの内部にはアクセスできません。

代替手段としてできることは次のとおりです。

  1. SQL 呼び出しをBackgroundWorkerに入れます。MSDN の優れた例であり、非常に使いやすいです。
  2. BackgroundWorker を呼び出すと、UI が解放されて、ある種の「お待ちください」コントロールが実行されます。SQL コマンドがいつ終了するか分からないので、少なくともプログラムが「処理中」であることをユーザーに知らせる何らかの制御を行うことができます。
  3. BackgroundWorker がRunWorkerCompleted発生したら、Please Wait を削除してデータをバインドできます。
于 2012-04-22T13:54:43.573 に答える