C# 显示从MySQL填充数据集的进度

C# 显示从MySQL填充数据集的进度,c#,mysql,dataset,progress,C#,Mysql,Dataset,Progress,我目前正在使用C和MySQL数据库后端开发一个应用程序 我的程序最终可能会从数据库加载大量数据,并将其添加到要在DataGridView中显示的数据集中。我希望能够显示数据集填充的进度,但不确定如何获取该数据集在数据库中的位置的引用 下面是我目前拥有的代码 DatabaseWork dbase = new DatabaseWork(); try { dbase.openConnection(); MySqlDataAdapter myDA = new MySqlDataAdapter()

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

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

下面是我目前拥有的代码

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 comment将进度条实现为一个选框进度条

为了能够更新数据集填充的进度条,您必须事先知道有多少条记录,然后继续执行类似于包装dataAdapter的操作,以了解它已将多少条记录放入数据集,我不完全确定您是否可以这样做

如果绑定数据源也需要相当长的时间,我会在选框栏中显示一条状态消息,并使用检索记录来更新它,然后使用呈现记录的方式进行更新。

而不是

myDA.Fill(table);
。。。您应该能够逐行填写表格:

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

   // Update progress view..
}

不过,它不如使用Fill方法那么简洁,所以我不确定您是否希望这样做。当然,为了能够显示完成了多少工作,您还需要通过Select count或类似方法获得表中的行数,正如phsr指出的那样。

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

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

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

希望这有帮助


Sascha

您可以使用marque进度条来指示加载取决于sql查询的复杂程度,即使是SELECT计数也可能需要相当长的时间,这将增加sql查询的延迟process@JagdPanther,它很古老,但仍然…你的回答很有帮助。谢谢这很有用,谢谢,我试图使用DataTable.TableNewRow事件,但在填充期间没有触发。RowChanged是正确的事件。@Sascha,这个答案很古老,但man这个答案很有用……谢谢!。如果您可以添加一段骨架代码来演示这一点,那就更好了。