This is a migrated thread and some comments may be shown as answers.

RadGridView Hierarchical Children

1 Answer 296 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Tim
Top achievements
Rank 1
Tim asked on 12 Aug 2014, 01:22 PM
I have a WPF form with a combo-box loaded with pole data. When a user selects a specific pole a RadGridView is bound to a data source representing all the equipment attached to that pole. Equipment data has a foreign key (parentid), that references the primary key of the same table it resides because a piece of equipment can be attached to another piece of equipment, so in essence, I have a RadGridView of Equipment with Hierarchical children. All row have a plus sign to the far left of the column providing access to view child equipment belonging to that row. So far everything looks great with one exception, the child at the end of the list has a plus sign and when clicked displays an empty row. How can I design this grid to hide the plus icon for equipment data with no children. My current xaml is shown below.

<Window x:Class="WebApiTest.EquipmentDisplay"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
        Title="Equipment Details" Height="551" Width="828"
        Closing="Window_Closing"
        WindowStartupLocation="CenterScreen">
    <Window.Resources>
        <!--<telerik:Theme x:Key="VistaTheme" Source="/Telerik.Windows.Themes.Summer;component/themes/generic.xaml" />-->
        <CollectionViewSource x:Key="Jobs"></CollectionViewSource>
        <CollectionViewSource x:Key="Maps"></CollectionViewSource>
        <CollectionViewSource x:Key="Poles"></CollectionViewSource>
        <CollectionViewSource x:Key="Themes"></CollectionViewSource>
        <CollectionViewSource x:Key="EquipmentGroup"></CollectionViewSource>
    </Window.Resources>
    <Grid Name="EquipmentGrid">
        <TextBlock Text="Jobs:" Width="44" Height="20" VerticalAlignment="Top" Margin="39,24,0,0" HorizontalAlignment="Left" />
        <telerik:RadComboBox x:Name="cboJobs" Margin="88,20,0,0"
                      ItemsSource="{Binding Source={StaticResource Jobs}}"
                      DisplayMemberPath="cJobNum" 
                      SelectedValuePath="nJob" 
                      SelectedItem="{Binding nJob, Mode=OneWayToSource}" 
                      SelectionChanged="cboJobs_SelectionChanged"
                      Height="22" VerticalAlignment="Top" HorizontalAlignment="Left" Width="182">
        </telerik:RadComboBox>
        <TextBlock Text="Maps:" Width="44" Height="20" VerticalAlignment="Top" Margin="39,49,0,0" HorizontalAlignment="left" />
        <telerik:RadComboBox x:Name="cboMaps" HorizontalAlignment="Left" VerticalAlignment="Top" Width="182" Margin="88,45,0,0"
                      ItemsSource="{Binding Source={StaticResource Maps}}"
                      DisplayMemberPath="cMapNum" 
                      SelectedValuePath="nMap" 
                      SelectedItem="{Binding nMap, Mode=OneWayToSource}"  
                      SelectionChanged="cboMaps_SelectionChanged"
                      IsSynchronizedWithCurrentItem="True"
                      />
        <TextBlock Text="Poles:" Width="44" Height="20" VerticalAlignment="Top" Margin="39,74,0,0" HorizontalAlignment="left" />
        <telerik:RadComboBox x:Name="cboPoles" HorizontalAlignment="Left" VerticalAlignment="Top" Width="182" Margin="88,70,0,0"
                      ItemsSource="{Binding Source={StaticResource Poles}}"
                      DisplayMemberPath="cPoleNum" 
                      SelectedValuePath="nPole" 
                      SelectedItem="{Binding nPole, Mode=OneWayToSource}"  
                      SelectionChanged="cboPoles_SelectionChanged"
                      IsSynchronizedWithCurrentItem="True"
                      />
        <TextBlock Text="Themes:" Height="20" VerticalAlignment="Top" Margin="0,26,231,0" HorizontalAlignment="Right" Width="44" />
        <telerik:RadComboBox x:Name="cboThemes" VerticalAlignment="Top" Margin="0,24,33,0" 
                      ItemsSource="{Binding Source={StaticResource Themes}}"
                      DisplayMemberPath="Name" 
                      SelectedValuePath="Theme" 
                      SelectedItem="{Binding Theme, Mode=OneWayToSource}" 
                      SelectionChanged="cboThemes_SelectionChanged"
                      IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Right" Width="182"
                      />
        <telerik:RadGridView x:Name="dvEquipment"
                             ItemsSource="{Binding Source={StaticResource EquipmentGroup}}"
                             telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                             Margin="39,128,33,38" telerik:ScrollingSettingsBehavior.IsEnabled="True"
                             AutoGenerateColumns="False" AlternateRowBackground="Bisque" ScrollMode="RealTime" >
            <telerik:RadGridView.Columns>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Id}" 
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Id" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Type}"
                                            Header="Type" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Description}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Description" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding PoleId}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Pole" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Owner}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Owner" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Comments}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Comments" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding HeightAboveGroundLine}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Height Above Ground" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding HorizontalOffset}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Horizontal Offset" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding AttachAngle}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Attach Angle" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding RotateAngle}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Rotate Angle" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Width}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Width" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Height}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Height" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Length}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Length" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding IsGrounded}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="IsGrounded" />
            </telerik:RadGridView.Columns>
            <telerik:RadGridView.ChildTableDefinitions>
                <telerik:GridViewTableDefinition >
                    <telerik:GridViewTableDefinition.Relation>
                        <telerik:PropertyRelation ParentPropertyName="Equipments" IsSelfReference="True" />
                    </telerik:GridViewTableDefinition.Relation>
                </telerik:GridViewTableDefinition>
            </telerik:RadGridView.ChildTableDefinitions>
            <telerik:RadGridView.HierarchyChildTemplate>
                <DataTemplate DataType="RadGridView">
                    <telerik:RadGridView ItemsSource="{Binding Children}" Name="Children" ShowGroupPanel="False"  
                                         telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}" 
                                         Style="{Binding SelectedTheme, Mode=OneWay}" AutoGenerateColumns="False"
                                         Loaded="GridViewDataControl_Loaded"
                                         GroupPanelStyle="{Binding SelectedTheme, Mode=OneWay}">
                        <telerik:RadGridView.Columns>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Type}"
                                            Header="Type" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Description}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Description" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Owner}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Owner" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Comments}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Comments" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding HeightAboveGroundLine}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Height Above Ground" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding HorizontalOffset}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Horizontal Offset" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding AttachAngle}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Attach Angle" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding RotateAngle}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Rotate Angle" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Width}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Width" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Height}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Height" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Length}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Length" />
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding IsGrounded}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="IsGrounded" />
                        </telerik:RadGridView.Columns>
                        <telerik:RadGridView.ChildTableDefinitions>
                            <telerik:GridViewTableDefinition>
                                <telerik:GridViewTableDefinition.Relation>
                                    <telerik:TableRelation IsSelfReference="True">
                                        <telerik:TableRelation.FieldNames>
                                            <telerik:FieldDescriptorNamePair
                                                ParentFieldDescriptorName="Id"
                                                ChildFieldDescriptorName="ParentId"
                                            />
                                        </telerik:TableRelation.FieldNames>
                                    </telerik:TableRelation>
                                </telerik:GridViewTableDefinition.Relation>
                            </telerik:GridViewTableDefinition>
                        </telerik:RadGridView.ChildTableDefinitions>
                        <telerik:RadGridView.HierarchyChildTemplate>
                            <DataTemplate>
                                <telerik:RadGridView ItemsSource="{Binding Children}" Name="Children" ShowGroupPanel="False"  
                                                     telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}" 
                                                     GroupPanelStyle="{Binding SelectedTheme, Mode=OneWay}" 
                                                     ItemContainerStyle="{Binding SelectedTheme, Mode=OneWay}" 
                                                     Loaded="GridViewDataControl_Loaded"
                                                     AutoGenerateColumns="False">
                                    <telerik:RadGridView.Columns>
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Type}"
                                            Header="Type" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Description}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Description" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Owner}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Owner" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Comments}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Comments" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding HeightAboveGroundLine}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Height Above Ground" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding HorizontalOffset}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Horizontal Offset" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding AttachAngle}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Attach Angle" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding RotateAngle}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Rotate Angle" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Width}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Width" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Height}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Height" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Length}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="Length" />
                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding IsGrounded}"
                                            telerik:StyleManager.Theme="{Binding SelectedTheme, Mode=OneWay}"
                                            Header="IsGrounded" />
                                    </telerik:RadGridView.Columns>
                                    <telerik:RadGridView.ChildTableDefinitions>
                                        <telerik:GridViewTableDefinition>
                                            <telerik:GridViewTableDefinition.Relation>
                                                <telerik:TableRelation IsSelfReference="True">
                                                    <telerik:TableRelation.FieldNames>
                                                        <telerik:FieldDescriptorNamePair
                                                            ParentFieldDescriptorName="Id"
                                                            ChildFieldDescriptorName="ParentId"
                                                        />
                                                    </telerik:TableRelation.FieldNames>
                                                </telerik:TableRelation>
                                            </telerik:GridViewTableDefinition.Relation>
                                        </telerik:GridViewTableDefinition>
                                    </telerik:RadGridView.ChildTableDefinitions>
                                </telerik:RadGridView>
                            </DataTemplate>
                        </telerik:RadGridView.HierarchyChildTemplate>
                    </telerik:RadGridView>
                </DataTemplate>
            </telerik:RadGridView.HierarchyChildTemplate>

        </telerik:RadGridView>

    </Grid>
</Window>

 Any help would be greatly appreciated.



1 Answer, 1 is accepted

Sort by
0
Boris
Telerik team
answered on 13 Aug 2014, 01:23 PM
Hello Tim,

A possible way to hide the plus sign is to set the IsExpandable property of the GridViewRow to false for each row that does not have any sub-items. In order to access that property you can use the RowLoaded event of RadGridView. For a more practical example you can check the SelfReference WPF / Silverlight demo.

I hope this helps.

Regards,
Boris Penev
Telerik
 
Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.
 
Tags
GridView
Asked by
Tim
Top achievements
Rank 1
Answers by
Boris
Telerik team
Share this question
or