Отображать реальный прогресс загрузки WPF DataGrid вместо .IsIndeterminate - PullRequest
0 голосов
/ 18 февраля 2020

Мне удалось добавить ProgressBar в мою форму WPF. Однако мой текущий навык застрял на использовании:

ProgressBar.IsIndeterminate = true;

DataGrid1.ItemsSource = await GetDataAsync();

ProgressBar.IsIndeterminate = false;

Любой профессионал готов описать, как заставить ProgressBar отображать фактический прогресс загрузки?

Вот мой полный код:

    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;
        });
    }

1 Ответ

1 голос
/ 18 февраля 2020

Вы не можете отобразить фактический процесс, если не знаете его, и не узнаете, если используемый вами API фактически не сообщает вам о текущем прогрессе.

API OdbcCommand не подходит, поэтому вам следует придерживаться неопределенных индикаторов выполнения.

...