Binding to a ICollectionView
I am trying to bind the ICollectionView of an ObservableCollection to a GridDataControl. I do this because I want to filter the collection before binding it to the grid.
It seems that the GridDataControl binds directly to the SourceCollection view on the ICollectionView which means any filtering I apply to the view is ignored.
My questions are:
a) Why is this implemented like this and how can I bind to the view?
b) If it's not possible to bind to the view, how can I filter my collection before displaying it in the grid?
Thanks.
It seems that the GridDataControl binds directly to the SourceCollection view on the ICollectionView which means any filtering I apply to the view is ignored.
My questions are:
a) Why is this implemented like this and how can I bind to the view?
b) If it's not possible to bind to the view, how can I filter my collection before displaying it in the grid?
Thanks.
SIGN IN To post a reply.
10 Replies
JJ
Jeraldes J
Syncfusion Team
July 17, 2010 07:43 AM UTC
Hi Scott,
You can use the filtering internally in the xaml and through code behing. As the filtering will be used at the loading itself.
Please refer the following sample code for filtering in the loading time.
XAML:
Code Behind:
void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
dataGrid.Model.View.BeginInit();
var fc = (from vc in this.dataGrid.VisibleColumns where vc.MappingName == "CompanyName" select vc).First();
FilterPredicate fp = new FilterPredicate();
fp.FilterType = FilterType.StartsWith;
fp.PredicateType=PredicateType.And;
fp.FilterValue = "A";
fp.IsCaseSensitive = false;
fc.Filters.Add(fp);
dataGrid.Model.View.EndInit();
}
Regards,
Jeraldes J
You can use the filtering internally in the xaml and through code behing. As the filtering will be used at the loading itself.
Please refer the following sample code for filtering in the loading time.
XAML:
Code Behind:
void dataGrid_Loaded(object sender, RoutedEventArgs e)
{
dataGrid.Model.View.BeginInit();
var fc = (from vc in this.dataGrid.VisibleColumns where vc.MappingName == "CompanyName" select vc).First();
FilterPredicate fp = new FilterPredicate();
fp.FilterType = FilterType.StartsWith;
fp.PredicateType=PredicateType.And;
fp.FilterValue = "A";
fp.IsCaseSensitive = false;
fc.Filters.Add(fp);
dataGrid.Model.View.EndInit();
}
Regards,
Jeraldes J
SJ
Scott Jeslis
August 3, 2010 10:59 PM UTC
I have the same need but I don't I know on control load time which of 3 particular filters my users want.
SJ
Scott Jeslis
August 3, 2010 11:27 PM UTC
Similar Filter Predicate code worked for me in the code behind (without the BeginInit & EndInit) based on the state of a toggle.
I was using MVVM so the code behind is not where I desired to do this at.
Additionally, can the filtering be done on an invisible column?
I was using MVVM so the code behind is not where I desired to do this at.
Additionally, can the filtering be done on an invisible column?
JJ
Jeraldes J
Syncfusion Team
August 6, 2010 08:30 AM UTC
Hi Scott,
You can use the manual XAML filtering internally by setting the filter predicated. In that set the Filter type, filter value and case sencitive internally in the XAML. Filtering will be done in the loaded itself.
You can set the filtering to the invisible column also by setting isHidden = true to the visual column.
Please refer the following sample code for filtering in the loading time.
XAML:
Please download the sample from the below link:
http://www.syncfusion.com/uploads/redirect.aspx?file=GCD-FilterWhileLoading-95519_e02b25ac.zip&team=development
Let us know if you face any other issues.
Regards,
Jeraldes J
You can use the manual XAML filtering internally by setting the filter predicated. In that set the Filter type, filter value and case sencitive internally in the XAML. Filtering will be done in the loaded itself.
You can set the filtering to the invisible column also by setting isHidden = true to the visual column.
Please refer the following sample code for filtering in the loading time.
XAML:
Please download the sample from the below link:
http://www.syncfusion.com/uploads/redirect.aspx?file=GCD-FilterWhileLoading-95519_e02b25ac.zip&team=development
Let us know if you face any other issues.
Regards,
Jeraldes J
SK
Scott Kobetis
August 18, 2010 12:41 AM UTC
How can I filter on a field in my collection that is not set as a visible column?
JJ
Jeraldes J
Syncfusion Team
August 20, 2010 12:46 PM UTC
Hi Scott,
We have developed a sample with the filter predicates that will filter the filed that is not in the VisibleColumn. Please refer the code snipped.
Code Snippet:
this.dataGrid.Model.Initialized += new EventHandler(Model_Initialized);
void Model_Initialized(object sender, EventArgs e)
{
ICollectionView view = this.dataGrid.Model.View;
view.Filter += new Predicate<object>(ShowFilteredOrdersList);
}
private bool ShowFilteredOrdersList(object item)
{
Orders ord = item as Orders;
if (ord.ShipRegion == "DF")
return true;
else
return false;
}
Please download the sample from the below link.
http://www.syncfusion.com/uploads/redirect.aspx?file=GCD-FilterWithoutVisualColumn-95519_be651fdf.zip&team=development
Let us know if you need any other details.
Regards,
Jeraldes J
We have developed a sample with the filter predicates that will filter the filed that is not in the VisibleColumn. Please refer the code snipped.
Code Snippet:
this.dataGrid.Model.Initialized += new EventHandler(Model_Initialized);
void Model_Initialized(object sender, EventArgs e)
{
ICollectionView view = this.dataGrid.Model.View;
view.Filter += new Predicate<object>(ShowFilteredOrdersList);
}
private bool ShowFilteredOrdersList(object item)
{
Orders ord = item as Orders;
if (ord.ShipRegion == "DF")
return true;
else
return false;
}
Please download the sample from the below link.
http://www.syncfusion.com/uploads/redirect.aspx?file=GCD-FilterWithoutVisualColumn-95519_be651fdf.zip&team=development
Let us know if you need any other details.
Regards,
Jeraldes J
SK
Scott Kobetis
August 30, 2010 01:41 AM UTC
Hi,
This works well until I try to add a grouped column in code. This resets the filter and reverts to displaying all items.
Any ideas?
Scott
This works well until I try to add a grouped column in code. This resets the filter and reverts to displaying all items.
Any ideas?
Scott
JJ
Jeraldes J
Syncfusion Team
August 31, 2010 10:01 AM UTC
Hi Scott,
When you want the data to be filtered and displayed at the time of removing the grouping, you have to use the GroupedColumns.Changed event to check with the filter to be set. This would set with the filer when ungrouping. Please refer with the sample code snippet from below.
[Code Snippet]
this.dataGrid.GroupedColumns.Changed += new EventHandler(GroupedColumns_Changed);
void GroupedColumns_Changed(object sender, EventArgs e)
{
ICollectionView view = this.dataGrid.Model.View;
view.Filter += new Predicate<object>(ShowFilteredOrdersList);
}
And download the sample from the below link.
http://www.syncfusion.com/uploads/redirect.aspx?file=GCD-FilterWithoutVisualColumn-95519_213575e.zip&team=development
Let us know if you need any other details.
Regards,
Jeraldes J
When you want the data to be filtered and displayed at the time of removing the grouping, you have to use the GroupedColumns.Changed event to check with the filter to be set. This would set with the filer when ungrouping. Please refer with the sample code snippet from below.
[Code Snippet]
this.dataGrid.GroupedColumns.Changed += new EventHandler(GroupedColumns_Changed);
void GroupedColumns_Changed(object sender, EventArgs e)
{
ICollectionView view = this.dataGrid.Model.View;
view.Filter += new Predicate<object>(ShowFilteredOrdersList);
}
And download the sample from the below link.
http://www.syncfusion.com/uploads/redirect.aspx?file=GCD-FilterWithoutVisualColumn-95519_213575e.zip&team=development
Let us know if you need any other details.
Regards,
Jeraldes J
MF
Mauricio Feijo
February 19, 2011 02:52 PM UTC
So, Jeraldes, are you saying the fact that changing the grouping resets all fitering is BY DESIGN? Not a bug? Could we hear the rationale behind that design decision?
Also, twice on this discussion you advise to check your code snippet for an example of how to filter by a column that is NOT in the visible columns collection, but fail to really demonstrate that in the code.
Also, twice on this discussion you advise to check your code snippet for an example of how to filter by a column that is NOT in the visible columns collection, but fail to really demonstrate that in the code.
MA
Manikandan
Syncfusion Team
February 28, 2011 07:48 AM UTC
Hi Mauricio,
Regarding the Filter :The Grid will maintain the single view to display all the possibilities, the Filtering will work on the Flat view. When the source was grouped by some constraints then view will be recreated in which only the group header will be in visible and then by expanding the view will be created again to display the expanded item. The group header will also considered as a record in the view, so we can’t apply the fitter to the view in which the records are all not homogenous.
Regarding the filter in hidden column: We have create a sample for this please find the sample in the following location, In this sample we have filtered the view based on the values appeared in the hidden column.
Sample :
http://www.syncfusion.com/uploads/redirect.aspx?&team=support&file=GDC_Invisible1230227542.zip
Please let us know if you have any queries.
Thanks,
Manikandan J R.
Regarding the Filter :The Grid will maintain the single view to display all the possibilities, the Filtering will work on the Flat view. When the source was grouped by some constraints then view will be recreated in which only the group header will be in visible and then by expanding the view will be created again to display the expanded item. The group header will also considered as a record in the view, so we can’t apply the fitter to the view in which the records are all not homogenous.
Regarding the filter in hidden column: We have create a sample for this please find the sample in the following location, In this sample we have filtered the view based on the values appeared in the hidden column.
Sample :
http://www.syncfusion.com/uploads/redirect.aspx?&team=support&file=GDC_Invisible1230227542.zip
Please let us know if you have any queries.
Thanks,
Manikandan J R.
SIGN IN To post a reply.
- 10 Replies
- 5 Participants
-
SK Scott Kobetis
- Jul 15, 2010 01:41 AM UTC
- Feb 28, 2011 07:48 AM UTC