一尘不染

使用DataTable将数据加载到DataGridView的进度栏

sql

我有一个DataGridView从SQL Server数据库加载数据的应用程序。当我加载数据时,需要花费很长时间。

我想向用户提供数据正在加载的信息。请问什么是将Progressbar数据加载到时的最佳连接方式DataGridView

我不希望任何人为我编写完整的代码。我只是想知道如何做到。

我看到有人悬赏赏赐了我的问题。我想说的是,目前我正在使用此代码,如果合适的话,我将向您推荐。

DTGdataTable = new DataTable();
SqlDataAdapter SDA = new SqlDataAdapter
SDA.Fill(DTGdataTable);
dataGridView1.DataSource = DTGdataTable ;

谢谢大家的宝贵时间。


阅读 172

收藏
2021-03-17

共1个答案

一尘不染

如果问题是从数据库中获取数据需要花费很长时间,那么我为您提供了一种可能的解决方案:

    private void buttonLoad_Click(object sender, EventArgs e)
    {
        progressBar.Visible = true;
        progressBar.Style = ProgressBarStyle.Marquee;
        System.Threading.Thread thread = 
          new System.Threading.Thread(new System.Threading.ThreadStart(loadTable));
        thread.Start();
    }

    private void loadTable()
    {
        // Load your Table...
        DataTable table = new DataTable();
        SqlDataAdapter SDA = new SqlDataAdapter();
        SDA.Fill(table);
        setDataSource(table);
    }

    internal delegate void SetDataSourceDelegate(DataTable table);
    private void setDataSource(DataTable table)
    {
        // Invoke method if required:
        if (this.InvokeRequired)
        {
            this.Invoke(new SetDataSourceDelegate(setDataSource), table);
        }
        else
        {
            dataGridView.DataSource = table;
            progressBar.Visible = false;
        }
    }

将将数据加载到另一个线程的方法,并在完成时设置数据源。应该有一个调用。如果要在进度条中显示百分比值,请不要使用“字幕”样式,而要添加其他函数和委托来调用以设置进度条的值。

如果将数据绑定到网格是问题,则不能将绑定放入另一个线程,并且可能会显示在另一个线程中运行的进度弹出窗口。

我希望这有帮助。

2021-03-17