C# WPF 创建链接到从数据库收集的结果的加载进度条
C# WPF Create Loading Progress Bar linked to Collected results from Database
我正在开发 C# WPF 简单应用程序。此应用程序包含多个要加载的框架,具体取决于数据库。
对于每个 table,我有一个 Frame
,所有的都 linked 到主页只是为了导航。我创建了加载框架,其中包含一个简单的进度条。
这是介绍,现在是我的问题。
我想 link 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;
}
如果我的 table 包含 1,000,000 条记录,我希望将 ProgressBar
link 加载到加载状态,例如当应用程序加载 500,000 时,ProgressBar
应该为 50 %.
我认为原因是当我们引用数据网格或绑定到一个元素时,我们只执行 SQL 语句并且它 returns 带有结果所以我们可以知道这个结果有多少加载了吗?谢谢
结合使用 SQL COUNT()
函数和 DataTable.TableNewRow
事件。每次向您的 table 添加新行时都会触发此事件,您可以使用它来跟踪进度。
首先,获取行数。
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);
我正在开发 C# WPF 简单应用程序。此应用程序包含多个要加载的框架,具体取决于数据库。
对于每个 table,我有一个 Frame
,所有的都 linked 到主页只是为了导航。我创建了加载框架,其中包含一个简单的进度条。
这是介绍,现在是我的问题。
我想 link 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;
}
如果我的 table 包含 1,000,000 条记录,我希望将 ProgressBar
link 加载到加载状态,例如当应用程序加载 500,000 时,ProgressBar
应该为 50 %.
我认为原因是当我们引用数据网格或绑定到一个元素时,我们只执行 SQL 语句并且它 returns 带有结果所以我们可以知道这个结果有多少加载了吗?谢谢
结合使用 SQL COUNT()
函数和 DataTable.TableNewRow
事件。每次向您的 table 添加新行时都会触发此事件,您可以使用它来跟踪进度。
首先,获取行数。
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);