【问题标题】:Show progress of filling a DataSet from MySQL显示从 MySQL 填充 DataSet 的进度
【发布时间】:2011-07-05 08:57:03
【问题描述】:

我目前正在使用 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();
}

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

【问题讨论】:

  • 你可以使用marque进度条来指示加载

标签: c# mysql dataset progress


【解决方案1】:

我会使用 Stecya 评论将进度条实现为选取框进度条。

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

如果绑定数据源也需要相当长的时间,我会在选取栏旁边显示一条状态消息,并使用“正在检索记录”对其进行更新,然后是类似于“正在渲染记录”的内容。

【讨论】:

    【解决方案2】:

    代替

    myDA.Fill(table);
    

    ...您应该能够逐行填充表格:

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

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

    【讨论】:

    • 根据 sql 查询的复杂程度,即使是 SELECT COUNT 也可能需要相当长的时间,这会增加进程的延迟
    • @JagdPanther,它已经很老了,但仍然......你的回答很有帮助。谢谢!
    【解决方案3】:

    这个答案可能来得有点晚,但也许对其他人有帮助。

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

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

    希望这会有所帮助。

    萨沙

    【讨论】:

    • 这很有用,谢谢,我试图使用 DataTable.TableNewRow 事件但在填充期间没有触发。 RowChanged 是正确的事件。
    • @Sascha,这个答案很老了,但是这个人很有帮助......谢谢!。如果您可以添加一段骨架代码来演示这一点,那就更好了。
    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2019-07-23
    • 1970-01-01
    • 2011-11-19
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多