This question is locked. New answers and comments are not allowed.
Hello,
We have a scenario where we want to use VirtualQueryableCollectionView with RadDataFilter using WCF RIA Services.
What we have done is binding a radgridview to a VirtualQueryableCollectionView which is fetching Data from WCF RIA Service. We also need RadDataFilter to work along with it. Here is XAML
and this is our ViewModel code
Now everything is working fine except one issue. If I specify a filter which does not returns any result or we can say if loadOperation.TotalEntityCount is returned as 0, Then AccountsCollectionView_ItemsLoading does not fires anymore even if I remove that filter. Reason behind is VirtualItemCount is set to 0.
Is there any event or some way so that I can get to know when user modifies filters in RadDataFilter or any way I can get this to work.
Thanks and Regards,
Rajat Panwar
We have a scenario where we want to use VirtualQueryableCollectionView with RadDataFilter using WCF RIA Services.
What we have done is binding a radgridview to a VirtualQueryableCollectionView which is fetching Data from WCF RIA Service. We also need RadDataFilter to work along with it. Here is XAML
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
MaxHeight
=
"256"
/>
<
RowDefinition
Height
=
"*"
/>
</
Grid.RowDefinitions
>
<
telerik:RadExpander
telerik:StyleManager.Theme
=
"Metro"
Header
=
"FILTER OPTIONS"
FontFamily
=
"/S4S.Reseller.Client;component/Fonts/Fonts.zip#Segoe UI"
FontSize
=
"16"
Background
=
"{x:Null}"
BorderBrush
=
"{StaticResource MetroBlue}"
BorderThickness
=
"1"
>
<
telerik:RadDataFilter
Source
=
"{Binding AccountsCollectionView}"
telerik:StyleManager.Theme
=
"Metro"
/>
</
telerik:RadExpander
>
<
telerik:RadGridView
IsBusy
=
"{Binding AccountsCollectionView.IsLoading}"
AutoGenerateColumns
=
"False"
ItemsSource
=
"{Binding AccountsCollectionView}"
telerik:StyleManager.Theme
=
"Metro"
BorderBrush
=
"{x:Null}"
BorderThickness
=
"0"
ShowGroupPanel
=
"False"
IsReadOnly
=
"True"
IsFilteringAllowed
=
"False"
FontFamily
=
"/Surf4Sure.Reseller.Client;component/Fonts/Fonts.zip#Segoe UI"
FontSize
=
"18.667"
RowIndicatorVisibility
=
"Collapsed"
Grid.Row
=
"1"
IsSynchronizedWithCurrentItem
=
"True"
CanUserDeleteRows
=
"False"
CanUserInsertRows
=
"False"
ValidatesOnDataErrors
=
"None"
DataLoadMode
=
"Asynchronous"
>
<
telerik:RadGridView.Columns
>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding AccountType}"
Header
=
""
>
<
telerik:GridViewDataColumn.CellTemplate
>
<
DataTemplate
>
<
Image
Source
=
"{Binding AccountType, Converter={StaticResource AccountTypeToImagePathConverter}}"
HorizontalAlignment
=
"Stretch"
VerticalAlignment
=
"Stretch"
Height
=
"56"
Width
=
"56"
/>
</
DataTemplate
>
</
telerik:GridViewDataColumn.CellTemplate
>
</
telerik:GridViewDataColumn
>
<
telerik:GridViewDataColumn
Header
=
"Account Id"
DataMemberBinding
=
"{Binding AccountId}"
Width
=
"*"
/>
<
telerik:GridViewDataColumn
Header
=
"Account Name"
DataMemberBinding
=
"{Binding AccountName}"
Width
=
"*"
/>
<
telerik:GridViewDataColumn
Header
=
"Primary Email"
DataMemberBinding
=
"{Binding PrimaryEmailAddress}"
Width
=
"*"
/>
<
telerik:GridViewDataColumn
Header
=
"Created On"
DataMemberBinding
=
"{Binding CreatedOn}"
Width
=
"*"
/>
<
telerik:GridViewDataColumn
Header
=
"Created By"
DataMemberBinding
=
"{Binding CreatedByName}"
Width
=
"*"
/>
</
telerik:RadGridView.Columns
>
<
i:Interaction.Triggers
>
<
S4S_Reseller_Client_Helpers:RadGridViewRowMouseDoubleClickTrigger
>
<
i:InvokeCommandAction
Command
=
"{Binding ShowAccountDetailsCommand}"
/>
</
S4S_Reseller_Client_Helpers:RadGridViewRowMouseDoubleClickTrigger
>
</
i:Interaction.Triggers
>
</
telerik:RadGridView
>
</
Grid
>
and this is our ViewModel code
public
VirtualQueryableCollectionView AccountsCollectionView {
get
;
private
set
; }
private
S4SDataContext dataContext =
null
;
public
AccountsListViewModel()
{
dataContext =
new
S4SDataContext();
AccountsCollectionView =
new
VirtualQueryableCollectionView() { LoadSize = App.DefaultPageSize, VirtualItemCount = 10 };
AccountsCollectionView.ItemsLoading +=
new
EventHandler<VirtualQueryableCollectionViewItemsLoadingEventArgs>(AccountsCollectionView_ItemsLoading);
}
void
AccountsCollectionView_ItemsLoading(
object
sender, VirtualQueryableCollectionViewItemsLoadingEventArgs e)
{
var accountsQuery = dataContext.GetAccountsQuery().IncludeTotalCount(
true
).Where(AccountsCollectionView.FilterDescriptors).OrderBy(o => o.AccountName).Sort(AccountsCollectionView.SortDescriptors).Skip(e.StartIndex).Take(e.ItemCount);
dataContext.Load<Account>(accountsQuery).Completed += (querySender, args) =>
{
var loadOperation = (LoadOperation)querySender;
if
(loadOperation.TotalEntityCount != -1 && loadOperation.TotalEntityCount != AccountsCollectionView.VirtualItemCount)
{
AccountsCollectionView.VirtualItemCount = loadOperation.TotalEntityCount;
}
AccountsCollectionView.Load(e.StartIndex, loadOperation.Entities);
};
}
Now everything is working fine except one issue. If I specify a filter which does not returns any result or we can say if loadOperation.TotalEntityCount is returned as 0, Then AccountsCollectionView_ItemsLoading does not fires anymore even if I remove that filter. Reason behind is VirtualItemCount is set to 0.
Is there any event or some way so that I can get to know when user modifies filters in RadDataFilter or any way I can get this to work.
Thanks and Regards,
Rajat Panwar