C# 显示从MySQL填充数据集的进度
我目前正在使用C和MySQL数据库后端开发一个应用程序 我的程序最终可能会从数据库加载大量数据,并将其添加到要在DataGridView中显示的数据集中。我希望能够显示数据集填充的进度,但不确定如何获取该数据集在数据库中的位置的引用 下面是我目前拥有的代码C# 显示从MySQL填充数据集的进度,c#,mysql,dataset,progress,C#,Mysql,Dataset,Progress,我目前正在使用C和MySQL数据库后端开发一个应用程序 我的程序最终可能会从数据库加载大量数据,并将其添加到要在DataGridView中显示的数据集中。我希望能够显示数据集填充的进度,但不确定如何获取该数据集在数据库中的位置的引用 下面是我目前拥有的代码 DatabaseWork dbase = new DatabaseWork(); try { dbase.openConnection(); MySqlDataAdapter myDA = new MySqlDataAdapter()
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这个答案很有用……谢谢!。如果您可以添加一段骨架代码来演示这一点,那就更好了。