显示从MySQL填充DataSet的进度

我目前正在使用C#和MySQL数据库后端开发应用程序。

我的程序最终可能会从数据库中加载大量数据并添加到DataGridView中显示的数据集中。 我希望能够显示填充DataSet的进度,但不确定如何获取它在数据库中的位置的引用。

下面是我目前的代码。

DatabaseWork dbase = new DatabaseWork(); try { dbase.openConnection(); MySqlDataAdapter myDA = new MySqlDataAdapter(); myDA.SelectCommand = new MySqlCommand(query, dbase.conn); DataTable table = new DataTable(); myDA.Fill(table); BindingSource bSource = new BindingSource(); bSource.DataSource = table; tblDetails.DataSource = bSource; //tblGrid.Columns[0].Visible = false; } catch (MySqlException ex) { dbase.displayError(ex.Message, ex.Number); } finally { dbase.closeConnection(); } 

我知道我必须将这部分代码放入像后台工作者这样的线程中,但是如何更改此代码以显示进度。

我会和Stecya一起评论一个工具进度条作为一个选框进度条。

为了能够更新数据集填充的进度条,你必须事先知道你有多少条记录,然后继续做一些事情,比如包装dataAdapter以了解它放入数据集的记录数量,我就是我不完全确定你能做到。

如果绑定dataSource也需要相当长的时间,我会有一个状态消息和选框栏,并用“检索记录”更新它,然后按照“渲染记录”的方式更新。

这个答案可能会有点晚,但也许它可以帮助别人。

在许多情况下,显示到目前为止读取的记录数就足够了。 这可以通过处理DataTable.RowChanged事件来完成。 从我可以validation的测试实现中,事件将触发DataAdapter.Fill-Method添加的每一行。 处理事件时,您可以通过查看DataTable.Rows.Count-Property来获取读取的数字记录

我通常做的是在后台线程中读取数据,更新标签或列表框条目。 实际更新gui的方法缓冲对标签的更新,以便gui更改每秒仅发生一次以防止闪烁。

希望这可以帮助。

萨沙

代替

 myDA.Fill(table); 

……你应该能够逐行填写表格:

 var dataReader = myDA.SelectCommand.ExecuteReader(); int progress = 0; while (dataReader.Read()) { table.Rows.Add(dataReader); progress++; // Update progress view.. } 

它不像使用Fill方法那样整洁,所以我不确定你是否想这样做。 当然,为了能够显示完成了多少百分比的工作,您还需要通过“选择计数”或类似的方式获取表中的行数,就像phsr指出的那样。