Hello,
I don't get any rows displayed when filtering with popup mode, grouping with drag&drop and sorting either by clicking on the column header or programatically.
And I get all my rows back when clearing filter/grouping/sorting either directly on the UI or programatically. Could you please help me?
Designer.xaml
<telerik:RadGridView x:Name="AttributesTable" ItemsSource="{Binding Path=Items}" RowDetailsVisibilityMode="Collapsed" ScrollViewer.CanContentScroll="False" AutoGenerateColumns="False" CanUserSortColumns="True" Sorting="AttributesTable_Sorting" PreparedCellForEdit="AttributesTable_PreparedCellForEdit" CellEditEnded="AttributesTable_CellEditEnded" FilteringMode="Popup" IsFilteringAllowed="True" MouseLeftButtonDown="AttributesTable_MouseLeftButtonDown" FieldFilterEditorCreated="OnRadGridViewFieldFilterEditorCreated"> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn> <telerik:GridViewDataColumn.CellTemplate> <DataTemplate> <Button Style="{StaticResource NoChromeButton}" Command="{base:XamlRoot Path=DataContext.Navigate}" CommandParameter="{Binding}"> <Image Source="/STTAR;component/Resources/Object_Globe_16xLG.png" ToolTip="{base:ResX ResKey=CenterMapToolTip}"/> </Button> </DataTemplate> </telerik:GridViewDataColumn.CellTemplate> </telerik:GridViewDataColumn> </telerik:RadGridView.Columns> </telerik:RadGridView>
Code.cs
columns = (this.DataContext as AttributesTableViewModel)?.Columns;
items = (this.DataContext as AttributesTableViewModel)?.Items;
DynAdapter = (this.DataContext as AttributesTableViewModel)?.DynAdapter;
if (columns.Count == 0)
{
var temp = AttributesTable.Columns[0];
AttributesTable.Columns.Clear();
AttributesTable.Columns.Add(temp);
return;
} var alreadyInsertedColsNames = (from col in (AttributesTable.Columns as ObservableCollection<GridViewColumn>).Where(col => col.DisplayIndex != 0) select col.Header as string).ToList();var colsNames = (from col in columns select col.DisplayName).ToList();var notInsertedColsNames = colsNames.Except(alreadyInsertedColsNames).ToList();var toRemoveColsNames = alreadyInsertedColsNames.Except(colsNames).ToList();if (notInsertedColsNames.Count > 0) foreach (string colName in notInsertedColsNames) { FeatureAttribute selectedCol = columns.Where(col => col.DisplayName == colName).FirstOrDefault(); var gridViewColumn = new GridViewDataColumn(); switch (selectedCol.Name) { case FeatureAttributes.Cost: string costUnit = String.Format(" ({0})", DynAdapter.Project.Settings.CurrencyCode); gridViewColumn.Header = selectedCol.DisplayName + costUnit; break; case FeatureAttributes.Length: string lengthUnit = " (m)"; gridViewColumn.Header = selectedCol.DisplayName + lengthUnit; break; case FeatureAttributes.Id: case FeatureAttributes.Source: case FeatureAttributes.Support: gridViewColumn.IsReadOnly = true; gridViewColumn.Header = selectedCol.DisplayName; break; default: gridViewColumn.Header = selectedCol.DisplayName; break; } // GetBindingStringForAttribute returns ".[propertyName]"
gridViewColumn.DataMemberBinding = new Binding(GetBindingStringForAttribute(selectedCol)); gridViewColumn.FilterMemberPath = GetBindingStringForAttribute(selectedCol); gridViewColumn.FilterMemberType = selectedCol.DataType; gridViewColumn.DataType = selectedCol.DataType; gridViewColumn.ShowDistinctFilters = false; gridViewColumn.CellTemplateSelector = (DataTemplateSelector)GridContainer.Resources["CellTemplateSelector"]; gridViewColumn.CellEditTemplateSelector = (DataTemplateSelector)GridContainer.Resources["CellEditTemplateSelector"]; AttributesTable.Columns.Add(gridViewColumn); } foreach (string toRem in toRemoveColsNames) { var colToRemove = (AttributesTable.Columns as ObservableCollection<GridViewColumn>) .FirstOrDefault(col => col.Header == toRem); if (AttributesTable.Columns.Contains(colToRemove)) AttributesTable.Columns.Remove(colToRemove); }