Search code examples
c#datagridprogress-bar

Display real progress of loading WPF DataGrid instead of .IsIndeterminate


I have managed to get ProgressBar into my WPF form. However my current skill is stuck on using:

ProgressBar.IsIndeterminate = true;

DataGrid1.ItemsSource = await GetDataAsync();

ProgressBar.IsIndeterminate = false;

Any professional ready to describe how to get ProgressBar to display actual loading progress?

Here is my full code:

    private async void Button_Click_1(object sender, RoutedEventArgs e)
    {
        try
        {
            ProgressBar.IsIndeterminate = true;

            DataGrid1.ItemsSource = await GetDataAsync();

            ProgressBar.IsIndeterminate = false;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private Task<DataView> GetDataAsync()
    {
        return Task.Run(() =>
        {

            string connectionStringDE = "Driver={Pervasive ODBC Client Interface};ServerName=DE875;dbq=@DEDBFS;Uid=DEUsername;Pwd=DEPassword;";
            string queryStringDE = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANYN,COUNTRY,ID,ACTIVE from COMPANY";
            string connectionStringFR = "Driver={Pervasive ODBC Client Interface};ServerName=FR875;dbq=@FRDBFS;Uid=FRUsername;Pwd=FRPassword;";
            string queryStringFR = "select NRO,NAME,NAMEA,NAMEB,ADDRESS,POSTA,POSTN,POSTADR,COMPANYN,COUNTRY,ID,ACTIVE from COMPANY";

            DataTable dataTable = new DataTable("COMPANY");
            // using-statement will cleanly close and dispose unmanaged resources i.e. IDisposable instances
            using (OdbcConnection dbConnectionDE = new OdbcConnection(connectionStringDE))
            {
                dbConnectionDE.Open();
                OdbcDataAdapter dadapterDE = new OdbcDataAdapter();
                dadapterDE.SelectCommand = new OdbcCommand(queryStringDE, dbConnectionDE);

                dadapterDE.Fill(dataTable);

            }
            using (OdbcConnection dbConnectionFR = new OdbcConnection(connectionStringFR))
            {
                dbConnectionFR.Open();
                OdbcDataAdapter dadapterFR = new OdbcDataAdapter();
                dadapterFR.SelectCommand = new OdbcCommand(queryStringFR, dbConnectionFR);

                var newTable = new DataTable("COMPANY");
                dadapterFR.Fill(newTable);

                dataTable.Merge(newTable);

            }

            return dataTable.DefaultView;
        });
    }

Solution

  • You can't display the actual process unless you know it and you don't unless the API that you are using actually reports the current progress to you.

    The OdbcCommand API doesn't so you should stick to using indeterminate progress bars.