2017-04-09 46 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

非常感谢。 –