2012-04-22 100 views
0

我遇到進度條問題。我有一個按鈕(SELECT * FROM Table)。當數據從數據庫讀取時需要進度條

當我點擊它時,我想要在datagridview中顯示數據。沒關係,工作正常。

但是現在我需要製作一個進度條,而數據是從數據庫讀取的。

默認情況下,進度條應爲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; 
    } 
+2

您有一個SQL注入漏洞。 – SLaks 2012-04-22 13:37:33

+0

可能是的,但現在開始我需要進度條使它工作 – 2012-04-22 13:41:07

+1

你不能; ADO.Net不提供進度通知。 – SLaks 2012-04-22 13:42:12

回答

0

你需要重新思考你的邏輯。

當你把這個SQL調用想象成代碼運行在你的程序之外,這意味着你只能啓動它並等待它完成,但是你將無法訪問它的進度有多遠。

你可以做作爲替代的是:

  1. 把你的SQL調用的BackgroundWorker。 MSDN上的很好的例子,非常容易使用。
  2. 當您調用BackgroundWorker時,可釋放您的UI以運行某種「請稍候」控件。由於SQL命令結束時你不會有任何想法,因此至少可以進行某種控制,讓用戶知道該程序是「正在處理」的。
  3. 一旦BackgroundWorker的RunWorkerCompleted發生,您可以刪除您的請稍候並綁定您的數據。