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);
}