希望在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有很多

希望在datagridview填充数据时显示动画

您可以查看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
}