wpf-devexpress-dot-xpf-dot-grid-dot-multidetaildescriptor.md
Provides access to Detail Descriptors to be displayed by this multi-detail container.
Namespace : DevExpress.Xpf.Grid
Assembly : DevExpress.Xpf.Grid.v25.2.Core.dll
NuGet Package : DevExpress.Wpf.Grid.Core
public DetailDescriptorCollection DetailDescriptors { get; }
Public ReadOnly Property DetailDescriptors As DetailDescriptorCollection
| Type | Description |
|---|---|
| DetailDescriptorCollection |
A DetailDescriptorCollection object containing Detail Descriptors to be displayed by this multi-detail container.
|
When you need a GridControl to display multiple details, you need to assign a MultiDetailDescriptor descendant to the GridControl.DetailDescriptor property. This can be a TabViewDetailDescriptor object or another descendant. Once the required object is assigned, you need to populate it’s DetailDescriptors collection with Detail Descriptors that you want to display.
This example creates a master-detail GridControl in code-behind. The example creates a tabbed detail (TabViewDetailDescriptor) that contains the following tabs:
View Example: Create a Master-Detail Grid in Code
using DevExpress.Xpf.Grid;
using System.Windows;
namespace MasterDetailInCode {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
GridControl gridControl = CreateGridControl();
AddDetails(gridControl);
gridControl.Loaded += (d, e) => { (d as GridControl)?.ExpandMasterRow(0); };
grid.Children.Add(gridControl);
}
private GridControl CreateGridControl() {
GridControl gridControl = new GridControl();
gridControl.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew;
gridControl.ItemsSource = Employees.GetEmployees();
gridControl.View = new TableView();
((TableView)gridControl.View).AutoWidth = true;
((TableView)gridControl.View).ShowGroupPanel = false;
gridControl.View.DetailHeaderContent = nameof(Employees);
return gridControl;
}
private void AddDetails(GridControl gridControl) {
GridControl detailGridControl = new GridControl();
detailGridControl.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew;
detailGridControl.View = new TableView();
((TableView)detailGridControl.View).AutoWidth = true;
((TableView)detailGridControl.View).ShowGroupPanel = false;
detailGridControl.View.DetailHeaderContent = nameof(Employee.Orders);
DataControlDetailDescriptor gridDetail = new DataControlDetailDescriptor();
gridDetail.ItemsSourcePath = nameof(Employee.Orders);
gridDetail.DataControl = detailGridControl;
ContentDetailDescriptor customDetail = new ContentDetailDescriptor();
customDetail.ContentTemplate = (DataTemplate)FindResource("notesTemplate");
customDetail.HeaderContent = nameof(Employee.Notes);
ContentDetailDescriptor chartDetail = new ContentDetailDescriptor();
chartDetail.ContentTemplate = (DataTemplate)FindResource("chartTemplate");
chartDetail.HeaderContent = "Stats";
TabViewDetailDescriptor tabDetail = new TabViewDetailDescriptor();
tabDetail.DetailDescriptors.Add(gridDetail);
tabDetail.DetailDescriptors.Add(customDetail);
tabDetail.DetailDescriptors.Add(chartDetail);
gridControl.DetailDescriptor = tabDetail;
}
}
}
Imports DevExpress.Xpf.Grid
Imports System.Windows
Namespace MasterDetailInCode
Public Partial Class MainWindow
Inherits Window
Public Sub New()
Me.InitializeComponent()
Dim gridControl As GridControl = CreateGridControl()
AddDetails(gridControl)
AddHandler gridControl.Loaded, Sub(d, e) TryCast(d, GridControl)?.ExpandMasterRow(0)
Me.grid.Children.Add(gridControl)
End Sub
Private Function CreateGridControl() As GridControl
Dim gridControl As GridControl = New GridControl()
gridControl.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew
gridControl.ItemsSource = Employees.GetEmployees()
gridControl.View = New TableView()
CType(gridControl.View, TableView).AutoWidth = True
CType(gridControl.View, TableView).ShowGroupPanel = False
gridControl.View.DetailHeaderContent = NameOf(Employees)
Return gridControl
End Function
Private Sub AddDetails(ByVal gridControl As GridControl)
Dim detailGridControl As GridControl = New GridControl()
detailGridControl.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew
detailGridControl.View = New TableView()
CType(detailGridControl.View, TableView).AutoWidth = True
CType(detailGridControl.View, TableView).ShowGroupPanel = False
detailGridControl.View.DetailHeaderContent = NameOf(Employee.Orders)
Dim gridDetail As DataControlDetailDescriptor = New DataControlDetailDescriptor()
gridDetail.ItemsSourcePath = NameOf(Employee.Orders)
gridDetail.DataControl = detailGridControl
Dim customDetail As ContentDetailDescriptor = New ContentDetailDescriptor()
customDetail.ContentTemplate = CType(FindResource("notesTemplate"), DataTemplate)
customDetail.HeaderContent = NameOf(Employee.Notes)
Dim chartDetail As ContentDetailDescriptor = New ContentDetailDescriptor()
chartDetail.ContentTemplate = CType(FindResource("chartTemplate"), DataTemplate)
chartDetail.HeaderContent = "Stats"
Dim tabDetail As TabViewDetailDescriptor = New TabViewDetailDescriptor()
tabDetail.DetailDescriptors.Add(gridDetail)
tabDetail.DetailDescriptors.Add(customDetail)
tabDetail.DetailDescriptors.Add(chartDetail)
gridControl.DetailDescriptor = tabDetail
End Sub
End Class
End Namespace
<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:MasterDetailInCode"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts"
x:Class="MasterDetailInCode.MainWindow"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<DataTemplate x:Key="notesTemplate">
<TextBlock Text="{Binding Path=Notes}" TextWrapping="Wrap" Padding="4"/>
</DataTemplate>
<DataTemplate x:Key="chartTemplate">
<dxc:ChartControl DataSource="{Binding Path=Orders}">
<dxc:SimpleDiagram2D>
<dxc:SimpleDiagram2D.Series>
<dxc:PieSeries2D ArgumentDataMember="Supplier" ValueDataMember="Quantity" LabelsVisibility="True">
<dxc:PieSeries2D.PointOptions>
<dxc:PointOptions>
<dxc:PointOptions.ValueNumericOptions>
<dxc:NumericOptions Format="Percent" Precision="0"/>
</dxc:PointOptions.ValueNumericOptions>
</dxc:PointOptions>
</dxc:PieSeries2D.PointOptions>
<dxc:PieSeries2D.LegendPointOptions>
<dxc:PointOptions Pattern="{}{A}"/>
</dxc:PieSeries2D.LegendPointOptions>
</dxc:PieSeries2D>
</dxc:SimpleDiagram2D.Series>
</dxc:SimpleDiagram2D>
<dxc:ChartControl.Legend>
<dxc:Legend Visibility="Visible"/>
</dxc:ChartControl.Legend>
</dxc:ChartControl>
</DataTemplate>
</Window.Resources>
<Grid x:Name="grid"/>
</Window>
See Also