
The following code clears all rows in the grid. I also need to clear out the GridViewHeader(s). Can this be done?
Thanks
Rich
public static void DeepClear(RadGridView grid)
{
grid.Columns.Clear();
IEnumerable<
GridViewRow
> rows = grid.ChildrenOfType<
GridViewRow
>().Where(s => s.Item != null);
foreach (GridViewRow row in rows)
{
if (row.ChildrenOfType<
RadGridView
>().Count > 0)
{
DeepClear(row.ChildrenOfType<
RadGridView
>().First());
}
}
}
4 Answers, 1 is accepted
I have tested the DeepClear method and it clears all the data that is shown on the grid, including the values in the Header cells. I am not sure if you mean to clear the values in the GridViewHeader, or to remove the entire GridViewHeader.
Generally it is not a good idea to work with the Visual Elements instead of Data Elements. It is better that you use the following approach to clear all the GridView's data and its Headers:
private
void
DeepClear(RadGridView grid)
{
grid.ItemsSource =
null
;
grid.Columns.Clear();
}
I have prepared a sample project. Would you please review it and clarify what exactly do you mean by "clear out the GridViewHeader(s)"? All the best,
Didie
the Telerik team

That did not work for me.
Your example does not include the condition that causes my problem.
- I am generating the data dynamically using the light-weight data table
- After executing the deep clear I regenerate the data based on new column selections for the same tables
- Any header that was shown by being expanded in the previous state of the grid is now shown in the new version. That is, in the new version when I expand I get two headers. I also get two RadGridView_DataLoading events. If I deepclear and reload again I wind up with three headers.
My app is generating queries by example so this is a iterave process and I need to totally cear out everything so that the grid is in the same state as generated in the xaml.
I don't know if this effects anything but you may want to look at the xaml. It contains a GridHeader style to put a button on the header.
Thanks
Rich
<
telerik:RadGridView
Name
=
"radGridView"
Visibility
=
"Collapsed"
HeaderRowStyle
=
"{StaticResource style1}"
ItemsSource
=
"{Binding Collection}"
ShowGroupPanel
=
"False"
RowIsExpandedChanging
=
"radGridView_RowIsExpandedChanging"
DataLoading
=
"radGridView_DataLoading"
RowLoaded
=
"radGridView_RowLoaded"
SelectionMode
=
"Single"
SelectionChanged
=
"radGridView_SelectionChanged"
AutoGenerateColumns
=
"False"
>
</
telerik:RadGridView
>
<
UserControl
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
x:Class
=
"Cloudburst.PaneForm.QueryDesignForm"
xmlns:telerikGridViewFilter
=
"clr-namespace:Telerik.Windows.Controls.GridView.Filter"
mc:Ignorable
=
"d"
d:DesignHeight
=
"300"
d:DesignWidth
=
"400"
>
<
UserControl.Resources
>
<
SolidColorBrush
x:Key
=
"GridView_HeaderRowInnerBorder"
Color
=
"#FF4B4B4B"
/>
<
telerik:Office_BlackTheme
x:Key
=
"Theme"
/>
<
SolidColorBrush
x:Key
=
"GridView_HeaderInnerBorder"
Color
=
"#FF4B4B4B"
/>
<
LinearGradientBrush
x:Key
=
"GridView_HeaderBackground"
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FF5B5B5B"
Offset
=
"1"
/>
<
GradientStop
Color
=
"#FF868686"
/>
<
GradientStop
Color
=
"#FF4F4F4F"
Offset
=
"0.42"
/>
<
GradientStop
Color
=
"#FF0E0E0E"
Offset
=
"0.43"
/>
</
LinearGradientBrush
>
<
DataTemplate
x:Key
=
"GridViewHeaderIndentCellDataTemplate"
>
<
telerik:GridViewHeaderIndentCell
telerik:StyleManager.Theme
=
"{StaticResource Theme}"
/>
</
DataTemplate
>
<
telerik:BooleanToVisibilityConverter
x:Key
=
"BooleanToVisibilityConverter"
/>
<
ControlTemplate
x:Key
=
"GridViewHeaderRowTemplate"
TargetType
=
"telerik:GridViewHeaderRow"
>
<
telerik:SelectiveScrollingGrid
>
<
telerik:SelectiveScrollingGrid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"*"
/>
</
telerik:SelectiveScrollingGrid.ColumnDefinitions
>
<
Border
x:Name
=
"PART_GridViewHeaderRowBorder"
BorderBrush
=
"{TemplateBinding BorderBrush}"
BorderThickness
=
"{TemplateBinding BorderThickness}"
Grid.ColumnSpan
=
"4"
HorizontalAlignment
=
"{TemplateBinding HorizontalContentAlignment}"
Padding
=
"{TemplateBinding Padding}"
VerticalAlignment
=
"{TemplateBinding VerticalContentAlignment}"
>
<
Border
BorderBrush
=
"{StaticResource GridView_HeaderRowInnerBorder}"
BorderThickness
=
"1"
Background
=
"{TemplateBinding Background}"
/>
</
Border
>
<
telerik:DataCellsPresenter
x:Name
=
"PART_DataCellsPresenter"
Grid.Column
=
"3"
telerik:StyleManager.Theme
=
"{StaticResource Theme}"
/>
<
Border
x:Name
=
"PART_IndicatorPresenter"
BorderBrush
=
"{TemplateBinding BorderBrush}"
BorderThickness
=
"0,0,1,1"
telerik:SelectiveScrollingGrid.SelectiveScrollingOrientation
=
"Vertical"
Visibility
=
"{TemplateBinding RowIndicatorVisibility}"
Width
=
"25"
>
<
Border
BorderBrush
=
"{StaticResource GridView_HeaderInnerBorder}"
BorderThickness
=
"1"
Background
=
"{StaticResource GridView_HeaderBackground}"
>
<
telerik:RadButton
Click
=
"PropertyButton_Click"
IsBackgroundVisible
=
"False"
ToolTipService.ToolTip
=
"Edit properties"
Margin
=
"0"
>
<
Image
Source
=
"Images2/Properties_16.png"
Height
=
"16"
Width
=
"16"
></
Image
>
</
telerik:RadButton
>
</
Border
>
</
Border
>
<
telerik:IndentPresenter
x:Name
=
"PART_IndentPresenter"
Grid.Column
=
"1"
ItemTemplate
=
"{StaticResource GridViewHeaderIndentCellDataTemplate}"
IndentLevel
=
"{TemplateBinding IndentLevel}"
MinHeight
=
"{TemplateBinding MinHeight}"
telerik:SelectiveScrollingGrid.SelectiveScrollingOrientation
=
"Vertical"
telerik:StyleManager.Theme
=
"{StaticResource Theme}"
/>
<
Border
x:Name
=
"PART_HierarchyIndentPresenter"
BorderBrush
=
"{TemplateBinding BorderBrush}"
BorderThickness
=
"0,0,1,1"
Grid.Column
=
"2"
telerik:SelectiveScrollingGrid.SelectiveScrollingOrientation
=
"Vertical"
Visibility
=
"{Binding HasHierarchy, Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}"
Width
=
"25"
>
<
Border
BorderBrush
=
"{StaticResource GridView_HeaderInnerBorder}"
BorderThickness
=
"1"
Background
=
"{StaticResource GridView_HeaderBackground}"
/>
</
Border
>
</
telerik:SelectiveScrollingGrid
>
</
ControlTemplate
>
<
LinearGradientBrush
x:Key
=
"GridView_HeaderRowBackground"
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FF5B5B5B"
Offset
=
"1"
/>
<
GradientStop
Color
=
"#FF868686"
/>
<
GradientStop
Color
=
"#FF4F4F4F"
Offset
=
"0.42"
/>
<
GradientStop
Color
=
"#FF0E0E0E"
Offset
=
"0.43"
/>
</
LinearGradientBrush
>
<
SolidColorBrush
x:Key
=
"GridView_HeaderRowOuterBorder"
Color
=
"#FF848484"
/>
<
Style
x:Key
=
"style1"
TargetType
=
"telerik:GridViewHeaderRow"
>
<
Setter
Property
=
"Template"
Value
=
"{StaticResource GridViewHeaderRowTemplate}"
/>
<
Setter
Property
=
"Background"
Value
=
"{StaticResource GridView_HeaderRowBackground}"
/>
<
Setter
Property
=
"MinHeight"
Value
=
"27"
/>
<
Setter
Property
=
"BorderBrush"
Value
=
"{StaticResource GridView_HeaderRowOuterBorder}"
/>
<
Setter
Property
=
"BorderThickness"
Value
=
"1,0,0,1"
/>
<
Setter
Property
=
"VerticalContentAlignment"
Value
=
"Stretch"
/>
<
Setter
Property
=
"HorizontalContentAlignment"
Value
=
"Stretch"
/>
<
Setter
Property
=
"Padding"
Value
=
"0"
/>
</
Style
>
</
UserControl.Resources
>
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
>
<
telerik:RadGridView
Name
=
"radGridView"
Visibility
=
"Collapsed"
HeaderRowStyle
=
"{StaticResource style1}"
ItemsSource
=
"{Binding Collection}"
ShowGroupPanel
=
"False"
RowIsExpandedChanging
=
"radGridView_RowIsExpandedChanging"
DataLoading
=
"radGridView_DataLoading"
RowLoaded
=
"radGridView_RowLoaded"
SelectionMode
=
"Single"
SelectionChanged
=
"radGridView_SelectionChanged"
AutoGenerateColumns
=
"False"
>
</
telerik:RadGridView
>
</
Grid
>
</
UserControl
>
Hello Richard Harrigan,
I am afraid that the supplied code is not enough to reproduce your scenario. Is it possible to send us the whole application?
Also, I am a bit baffled as to why you need to perform such clear? As far as I can understand you would like to preserve the state of the grid before you change the source (correct me if I am wrong).
All the best,
Milan
the Telerik team

I don't need to save any information, i have the context saved elsewhere. What I was looking for was a simple way to reset the grid back to it's original state when initially instantiated. I made a change to create the grid in code and instantiatea new version as needed. That seems to be working out ok.
Thanks
Rich