Hi,
Could you please help me to figure out how to define columns and properties for all-level nested tables in hierarchical gridview?
I'm referring to pages:
https://docs.telerik.com/devtools/wpf/controls/radgridview/hierarchical-gridview/basic-hierarchies
https://docs.telerik.com/devtools/wpf/controls/radgridview/hierarchical-gridview/how-to/access-child-gridview
But columns and properties AutoGenerateColumns and ShowGroupPanel are applied only for first child table and second-level table and deeper is not affected by that property.
MainWindow.xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:HierarchyTest"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="HierarchyTest.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="513.789" Width="1084.149">
<Grid>
<telerik:RadGridView ItemsSource="{Binding}" DataLoading="RadGridView_DataLoading" AutoGenerateColumns="False" telerik:StyleManager.Theme="Fluent">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Id}" Header="Id" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding StartTime}" Header="Start Time" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding Type}" Header="Type" />
</telerik:RadGridView.Columns>
<telerik:RadGridView.ChildTableDefinitions>
<telerik:GridViewTableDefinition />
</telerik:RadGridView.ChildTableDefinitions>
<telerik:RadGridView.HierarchyChildTemplate>
<DataTemplate>
<telerik:RadGridView ItemsSource="{Binding ChildJobs}" Name="childGrid" ShowGroupPanel="False" telerik:StyleManager.Theme="Fluent" AutoGenerateColumns="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Id}" Header="Id" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding StartTime}" Header="Start Time" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding Type}" Header="Type" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</DataTemplate>
</telerik:RadGridView.HierarchyChildTemplate>
</telerik:RadGridView>
</Grid>
</Window>
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Telerik.Windows.Controls;
using Telerik.Windows.Controls.GridView;
using Telerik.Windows.Data;
namespace HierarchyTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public ObservableCollection<Build> Builds { get; set; } = new ObservableCollection<Build>();
public MainWindow()
{
InitializeComponent();
this.DataContext = this.Builds;
this.Builds.Add(new Build() { Id = 1 });
foreach (int i in Enumerable.Range(0, 10))
{
this.Builds[0].ChildJobs.Add(new Job() { Id = i });
this.Builds[0].ChildJobs[i].ChildJobs.Add(new Job() { Id = i + 1 });
}
}
private void RadGridView_DataLoading(object sender, Telerik.Windows.Controls.GridView.GridViewDataLoadingEventArgs e)
{
var dataControl = (GridViewDataControl)sender;
if (dataControl.ParentRow != null && dataControl.ChildTableDefinitions.Count == 0)
{
dataControl.ChildTableDefinitions.Add(new GridViewTableDefinition() { Relation = new PropertyRelation("ChildJobs") });
}
}
}
public class Build
{
public int Id { get; set; }
public DateTime StartTime { get; set; } = DateTime.Now;
public string Type { get; set; } = "Build";
public ObservableCollection<Job> ChildJobs { get; set; } = new ObservableCollection<Job>();
}
public class Job
{
public int Id { get; set; }
public DateTime StartTime { get; set; } = DateTime.Now;
public string Type { get; set; } = "Job";
public ObservableCollection<Job> ChildJobs { get; set; } = new ObservableCollection<Job>();
}
}