Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C WPF创建链接到从数据库收集的结果的加载进度条_C#_Wpf_Database_Progress Bar_Loading - Fatal编程技术网

C# C WPF创建链接到从数据库收集的结果的加载进度条

C# C WPF创建链接到从数据库收集的结果的加载进度条,c#,wpf,database,progress-bar,loading,C#,Wpf,Database,Progress Bar,Loading,我正在开发C WPF简单应用程序。此应用程序由几个要加载的帧组成,具体取决于数据库。 对于每个表,我都有一个框架,所有的框架都链接到主页,只是为了导航。我创建了加载框架,它由一个简单的进度条组成 这是导言,现在是我的问题 我想将ProgressBar链接到从数据库收集结果。 例如,此顺序:从Tablename中选择* 我希望在收集结果时启动ProgressBar。 我正在对我的数据库使用查询,以下是我的方法: 在我的DataAccessLayer上: public static DataTabl

我正在开发C WPF简单应用程序。此应用程序由几个要加载的帧组成,具体取决于数据库。 对于每个表,我都有一个框架,所有的框架都链接到主页,只是为了导航。我创建了加载框架,它由一个简单的进度条组成

这是导言,现在是我的问题

我想将ProgressBar链接到从数据库收集结果。 例如,此顺序:从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;
        }
如果我的表包含1000000条记录,我希望加载ProgressBar链接到加载状态,例如,当应用程序加载500000条时,ProgressBar应为50%


我认为这是因为当我们引用数据网格或绑定到一个元素时,我们只执行SQL语句,它返回结果,这样我们就可以知道这个结果加载了多少?感谢您使用SQL COUNT函数和DataTable.TableNewRow事件的组合。每次向表中添加新行时都会触发此事件,您可以使用它跟踪进度

tb.TableNewRow += (s,e) => progressBar.Value++;
da.Fill(tb);  
首先,获取行计数

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);  

下次请尝试格式化你的文章,阅读一段已售出的文字实在太难了!谢谢你给我的建议,请展示你的实现。至少你的选择方法。我更新了主题并添加了我的选择方法。你能解释一下这句话吗。tb.TableNewRow+=s,e=>progressBar.Value++;s、e和=>指的是什么?它是一个lambda表达式,其中s和e是传递给匿名方法的变量。你的评论可能是一个很好的问题,如果它还不存在的话。查看一些有关lambda表达式和匿名方法的阅读资料。