2017-04-09 42 views
3

我正在開發C#WPF簡單的應用程序。此應用程序由幾個要加載的幀組成,具體取決於數據庫。 對於每個表格,我有一個Frame,並且所有鏈接到主頁面僅用於導航。我創建了一個由簡單的進度條組成的加載框架。C#WPF創建加載進度條鏈接到從數據庫收集結果

這是現在的介紹這裏是我的問題。

我想鏈接ProgressBar和從數據庫收集結果。 例如,這個訂單:Select * from Tablename 我想ProgressBar啓動,而收集結果。 我在這裏我的數據庫使用的查詢是我的方法: 這對我DataAccessLayer:

public static DataTable ExecuteTable(string query, CommandType type, params SqlParameter[] arr) 
     { 
      SqlConnection cn = new SqlConnection(con); 
      cn.Open(); // connection 
      SqlCommand cmd = new SqlCommand(query, cn); 
      cmd.CommandType = type; 
      cmd.Parameters.AddRange(arr); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 
      return dt; 
     } 

這一次我的表格

public static DataTable SP_SELECTALLCATEGORIES() 
     { 
      DataAccessLayer.Open(); 
      DataTable dt = DataAccessLayer.ExecuteTable("SP_SELECTALLCATEGORIES", CommandType.StoredProcedure); 
      DataAccessLayer.Close(); 
      return dt; 
     } 

。如果我的表由1,000,000記錄時,我想加載ProgressBar鏈接到裝載狀態,例如,當應用程序加載500,000時,應該是50%。

我認爲這是因爲當我們引用數據網格或綁定到元素時,我們只執行SQL語句並返回結果,因此我們可以知道這個結果有多少被加載?謝謝

+1

請嘗試格式化您的文章下一次,它是真的很難閱讀一個銷售的文本塊! – user3079834

+0

感謝我編輯它的建議 –

+0

請顯示您的實施。至少你選擇的方法。 – burnsi

回答

2

使用SQL COUNT()函數和DataTable.TableNewRow事件的組合。每次將新行添加到表格時都會觸發此事件,您可以使用該行來跟蹤進度。

首先得到一排計數。

SqlCommand countCmd = new SqlCommand(@"SELECT COUNT(column) FROM table;", cn); 
int numRows = (int)countCmd.ExecuteScalar(); 

progressBar.Minimum = 0; 
progressBar.Maximum = numRows; 

然後,掛上DataTable.TableNewRow事件來跟蹤您的進度。

tb.TableNewRow += (s,e) => progressBar.Value++; 
da.Fill(tb); 
+0

請你能解釋這一行約翰。 'tb.TableNewRow + =(s,e)=> progressBar.Value ++;' 什麼是** s,e **和** => **指的是什麼? –

+1

它是一個lambda表達式,其中s和e是傳遞給匿名方法的變量。如果它不存在,你的評論可能是一個很好的問題。查看一些關於lambda表達式和匿名方法的讀物。 –

+0

非常感謝。 –