RadGridView Hierarchical Children

2 posts, 0 answers
  1. Tim
    Tim avatar
    10 posts
    Member since:
    May 2014

    Posted 12 Aug 2014 Link to this post

    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.



  2. Boris
    Admin
    Boris avatar
    276 posts

    Posted 13 Aug 2014 Link to this post

    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.
     
Back to Top