希望在datagridview填充数据时显示动画
本文关键字:显示 动画 数据 填充 datagridview 希望 | 更新日期: 2023-09-27 17:58:42
大家好,当表单加载事件时,我正在填充数据网格:
private void Inventory_Load(object sender, EventArgs e)
{
AcidDBDataContext db = new AcidDBDataContext();
BindingSource bs = new BindingSource();
bs.DataSource = db.GetProducts.ToList();
dgvInventory.DataSource = bs;
ProductBindingNavigator.BindingSource = bs;
ShowtoolStripButton2.Visible = false;
foreach (DataGridViewColumn c in dgvInventory.Columns)
{
c.DefaultCellStyle.Font = new Font("Arial", 12.0F, GraphicsUnit.Pixel);
}
}
它工作得很好,但有一个问题,我需要几秒钟的时间,我的状态很冷。当我的数据网格正在填充时,我该怎么做?显示加载动画,以及何时填充网格隐藏动画
我正在使用C#winForms。T有很多
您可以查看BackgroundWorkerThreads。
http://www.albahari.com/threading/part3.aspx
我在检索数据时经常使用它们。我会显示一个等待栏,调用将数据检索到数据集中的DoWork事件(对我们来说,这通常比将所述数据附加到网格要长),然后在RunWorkerCompleted事件中,我将数据附加到栅格并隐藏等待栏。该应用程序仍然冻结了几秒钟,但时间没有那么长。
下面是一些示例代码。基本上,锁定可能导致RefreshInventory
再次被调用的字段(但由于您在启动时加载,这可能不适用于您)。然后检索线程中的数据,并在线程完成时将其附加。
public void RefreshInventory()
{
// Lock any fields you want to lock during the update process
// Display some kind of waiting or progress bar
if (!bkgdWrkInventory.IsBusy)
bkgdWrkInventory.RunWorkerAsync();
}
private void bkgdWrkInventory_DoWork(object sender, DoWorkEventArgs e)
{
var db = new AcidDBDataContext();
e.Result = db.GetProducts.ToList();
}
private void bkgdWrkInventory_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null) // Check for errors
{
dgvInventory.DataSource = (List<Product>)e.Result;
}
else
{
// Show the error to the user
}
// Hide the waiting indicator
// Unlock the fields
}