This is a migrated thread and some comments may be shown as answers.

Asynchronous data loading with Entity Data Source?

1 Answer 271 Views
DataPager
This is a migrated thread and some comments may be shown as answers.
Samuel
Top achievements
Rank 1
Samuel asked on 15 Jul 2015, 04:46 PM

I have a GridView where the ItemsSource is bound to the PagedSource property of a DataPager.  The DataPager ItemsSource is bound to an EntityDataSource.  The problem is that this is blocking my UI thread.  The GridView has a "DataLoadMode" property which can be set to Asynchronous... but the pager doesn't.  How would I go about loading the data to the pager asynchronously?  I tried doing this in another thread but I keep getting a cross-thread exception even though I use the dispatcher to set the property to which the pager is bound.

 

<telerik:RadGridView x:Name="RadGridView1"
                                         Grid.Row="0"
                                         Margin="5,5,5,0"
                                         HorizontalAlignment="Stretch"
                                         VerticalAlignment="Stretch"
                                         AlternateRowBackground="LightBlue"
                                         AlternationCount="2"
                                         AutoGenerateColumns="False"
                                         CanUserDeleteRows="False"
                                         CanUserFreezeColumns="False"
                                         CanUserInsertRows="False"
                                         DataLoadMode="Asynchronous"
                                         GroupRenderMode="Nested"
                                         IsReadOnly="True"
                                         ItemsSource="{Binding ElementName=DataPager1,
                                                               Path=PagedSource}"
                                         RowIndicatorVisibility="Collapsed"
                                         ShowGroupPanel="False"
                                         telerik:StyleManager.Theme="Summer">
                        <telerik:RadGridView.Columns>
 
                            <telerik:GridViewDataColumn Width="60"
                                                        DataMemberBinding="{Binding StoreNumber}"
                                                        Header="Store"
                                                        ShowDistinctFilters="True"
                                                        ShowFieldFilters="False"
                                                        TextAlignment="Center" />
 
                            <telerik:GridViewDataColumn Width="80"
                                                        DataFormatString="dd-MMM-yyyy"
                                                        DataMemberBinding="{Binding ASNDate}"
                                                        Header="Ship Date"
                                                        ShowDistinctFilters="False"
                                                        SortingState="Descending"
                                                        TextAlignment="Center" />
 
                            <telerik:GridViewDataColumn Width="Auto"
                                                        MinWidth="80"
                                                        DataMemberBinding="{Binding PONumber}"
                                                        Header="PO"
                                                        ShowDistinctFilters="False"
                                                        TextAlignment="Center" />
 
                            <telerik:GridViewDataColumn Width="80"
                                                        DataFormatString="dd-MMM-yyyy"
                                                        DataMemberBinding="{Binding PODate}"
                                                        Header="PO Date"
                                                        ShowDistinctFilters="False"
                                                        TextAlignment="Center" />
 
                            <telerik:GridViewDataColumn Width="Auto"
                                                        MinWidth="80"
                                                        DataMemberBinding="{Binding InvoiceNumber}"
                                                        Header="Invoice"
                                                        ShowDistinctFilters="False"
                                                        TextAlignment="Center" />
 
                            <telerik:GridViewDataColumn Width="Auto"
                                                        DataMemberBinding="{Binding ToteID}"
                                                        Header="Tote"
                                                        ShowDistinctFilters="True"
                                                        TextAlignment="Center">
                                <telerik:GridViewDataColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Width="Auto"
                                                   Height="Auto"
                                                   HorizontalAlignment="Center"
                                                   VerticalAlignment="Center">
                                            <Hyperlink Click="OnToteClick" Tag="{Binding}">
                                                <TextBlock Width="Auto"
                                                           Height="Auto"
                                                           HorizontalAlignment="Center"
                                                           VerticalAlignment="Center"
                                                           Text="{Binding ToteID}" />
                                            </Hyperlink>
                                        </TextBlock>
                                    </DataTemplate>
                                </telerik:GridViewDataColumn.CellTemplate>
                            </telerik:GridViewDataColumn>
 
                            <telerik:GridViewDataColumn Width="80"
                                                        DataFormatString="dd-MMM-yyyy"
                                                        DataMemberBinding="{Binding Closed}"
                                                        Header="Completed"
                                                        ShowDistinctFilters="False" />
 
                            <telerik:GridViewDataColumn Width="Auto"
                                                        DataMemberBinding="{Binding ClosedByName}"
                                                        Header="Complete By"
                                                        ShowDistinctFilters="True"
                                                        ShowFieldFilters="False"
                                                        TextAlignment="Center" />
 
                        </telerik:RadGridView.Columns>
                    </telerik:RadGridView>
 
                    <telerik:RadDataPager x:Name="DataPager1"
                                          Grid.Row="1"
                                          Width="{Binding ActualWidth,
                                                          ElementName=RadGridView1}"
                                          Margin="5,0,5,5"
                                          DisplayMode="FirstLastPreviousNextNumeric"
                                          PageSize="{Binding PageSize,
                                                             Mode=TwoWay}"
                                          Source="{Binding ShipmentData}"
                                          telerik:StyleManager.Theme="Summer" />

 

public class ShipmentsViewModel : ViewModelBase
    {
        private readonly TIMS.Data.TIMSContext ctx =new Data.TIMSContext();
 
        public ShipmentsViewModel()
        {
            
        }
 
        #region Properties
 
        private int PageSizeValue = 20;
        public int PageSize
        {
            get { return PageSizeValue; }
            set
            {
                SetPropertyValue((() => PageSize), ref PageSizeValue, value);
            }
        }
 
 
        private QueryableEntityCollectionView<TIMS.Data.Entities.ToteView> ShipmentDataValue;
        public QueryableEntityCollectionView<TIMS.Data.Entities.ToteView> ShipmentData
        {
            get {
                    return ShipmentDataValue;
            }
            private set
            {
                SetPropertyValue((() => ShipmentData), ref ShipmentDataValue, value);
            }
        }
 
        #endregion
 
        #region Methods
 
        public override void OnNavigatedTo(Uri view, object data)
        {
            try
            {
                IsBusy = true;
                System.Threading.ThreadPool.QueueUserWorkItem(delegate
                {
                    var shipments = new QueryableEntityCollectionView<Data.Entities.ToteView>(((IObjectContextAdapter)ctx).ObjectContext, "ToteViews");
                    if (App.Store != null)
                    {
                        shipments.FilterDescriptors.Add(new FilterDescriptor("StoreNumber", FilterOperator.IsEqualTo, App.Store.Value, false));
                    }
 
 
                    App.Current.Dispatcher.Invoke(new Action(delegate
                    {
                        ShipmentDataValue = shipments;
                        IsBusy = false;
                    }));
 
                });
            }
            catch (Exception e)
            {
                App.Current.Dispatcher.BeginInvoke(new Action(delegate
                {
                    var dlg = new ChildWindows.ErrorDialog("0012:  An unknown error occured.");
                    App.LogError(e);
                    dlg.ShowDialog();
                    IsBusy = false;
                }));
            }
        }
 
        #endregion
 
        #region Commands
 
 
        #endregion
    }

1 Answer, 1 is accepted

Sort by
0
Dimitrina
Telerik team
answered on 16 Jul 2015, 12:37 PM
Hello,

For the time being, RadEntityFrameworkDataSource does not support async loading. I have made a Feature Request on this public: Asynchronous support.
You can vote for it and also follow the item to get notified once there is a change in its Status.

For the time being, I can suggest you considering RadDataServiceDataSource, which handles all operations asynchronously. 

Regards,
Dimitrina
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Tags
DataPager
Asked by
Samuel
Top achievements
Rank 1
Answers by
Dimitrina
Telerik team
Share this question
or