Skip to content Skip to sidebar Skip to footer

Show Progressbar When Loading Data Using EntityFrameWork In WPF

I want to show the progress of Data being fetched from Database in a Progressbar. Currently i am updating the content of a Button. Have no idea how to implement in this code . priv

Solution 1:

You won't be able to show the percentage of an EF-Query, as it doesn't notify you about the progress of the DB query (I don't know any DB-System that keeps the client informed about the status of a query)

You could consider splitting your query into pieces like this:

 private async void FetchInvoicesDataFunc(object sender, RoutedEventArgs e)
 {
   List<Invoice> results = new List<Invoice>();
   ProgressBtn.Content = "Loading Data ...";
   await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(0, 500));  
   ProgressBtn.Content = "25% done...";
   await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(501, 1000)); 
   ProgressBtn.Content = "50% done...";
   await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(1001, 1500)); 
   ProgressBtn.Content = "75% done...";
   await Task.Run(async() => results.AddRange(await FetchInvoiceDataAsync(1501, 2000));        
   InvoiceGrid.ItemsSource = results;
   ProgressBtn.Content = "Loaded !";    
 }

 private async Task<List<Invoice>> FetchInvoiceDataAsync(int start, int end)
 {
   List<Invoice> result;
   using(var context = new Intelliventory_DBEntities() )
   {  
     result  = await context.Invoices.Where(b => b.InvoiceID >= start && b.InvoiceID <= end).Include(x => x.Customer).ToListAsync();      
   }

   return  result;
 }

Please note that this will have a negative impact on the performance of your application. There are thousands of tutorials how to use progressbars both in WinForms and WPF so i won't dive into that topic.


Post a Comment for "Show Progressbar When Loading Data Using EntityFrameWork In WPF"