DetailDescriptorCollection Class
Stores a collection of Detail Descriptors.
Namespace: DevExpress.Xpf.Grid
Assembly:
DevExpress.Xpf.Grid.v21.1.Core.dll
NuGet Package:
DevExpress.Wpf.Grid.Core
Declaration
public class DetailDescriptorCollection :
ObservableCollection<DetailDescriptorBase>
Public Class DetailDescriptorCollection
Inherits ObservableCollection(Of DetailDescriptorBase)
The following members return DetailDescriptorCollection objects:
This class stores a collection of DetailDescriptorBase descendants. Such collections are exposed by Detail Descriptors that allow you to display multiple details on the same level.
DetailDescriptorCollection is the type of the MultiDetailDescriptor.DetailDescriptors property exposed by the TabViewDetailDescriptor class. In other words, you will need to use this collection when setting up multiple details to be displayed within a tabbed container.
Example
The following example shows how to create a new grid and set up Master-Detail data representation in code. When setting up a Master-Detail hierarchy, a detail grid and a custom detail section are placed within a tabbed container. So, the following Detail Descriptor types are used: DataControlDetailDescriptor, ContentDetailDescriptor, and TabViewDetailDescriptor.
View Example
<dxg:GridControl Grid.Row="0" Name="gridControl1" AutoGenerateColumns="AddNew" >
<dxg:GridControl.View>
<dxg:TableView DetailHeaderContent="Employees" AutoWidth="True" ShowGroupPanel="False" />
</dxg:GridControl.View>
<dxg:GridControl.DetailDescriptor>
<dxg:TabViewDetailDescriptor>
<dxg:TabViewDetailDescriptor.DetailDescriptors>
<dxg:DataControlDetailDescriptor ItemsSourcePath="Orders">
<dxg:DataControlDetailDescriptor.DataControl>
<dxg:GridControl AutoGenerateColumns="AddNew">
<dxg:GridControl.View>
<dxg:TableView DetailHeaderContent="Orders" AutoWidth="True" ShowGroupPanel="False" />
</dxg:GridControl.View>
</dxg:GridControl>
</dxg:DataControlDetailDescriptor.DataControl>
</dxg:DataControlDetailDescriptor>
<dxg:ContentDetailDescriptor ContentTemplate="{StaticResource EmployeeNotes}" HeaderContent="Notes">
</dxg:ContentDetailDescriptor>
</dxg:TabViewDetailDescriptor.DetailDescriptors>
</dxg:TabViewDetailDescriptor>
</dxg:GridControl.DetailDescriptor>
</dxg:GridControl>
private void Button_Click(object sender, RoutedEventArgs e)
{
GridControl newGrid = CreateGrid();
AddDetailsToGrid(newGrid);
Grid.SetRow(newGrid, 2);
mainGrid.Children.Add(newGrid);
}
private GridControl CreateGrid()
{
GridControl newGrid = new GridControl();
newGrid.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew;
newGrid.View = new TableView();
(newGrid.View as TableView).AutoWidth = true;
(newGrid.View as TableView).ShowGroupPanel = false;
newGrid.View.DetailHeaderContent = "Employees";
newGrid.ItemsSource = Employees;
return newGrid;
}
private void AddDetailsToGrid(GridControl grid)
{
DataControlDetailDescriptor dataControlDetail = new DataControlDetailDescriptor();
dataControlDetail.ItemsSourcePath = "Orders";
GridControl detailGrid = new GridControl();
dataControlDetail.DataControl = detailGrid;
detailGrid.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew;
detailGrid.View.DetailHeaderContent = "Orders";
(detailGrid.View as TableView).ShowGroupPanel = false;
ContentDetailDescriptor contentDetail = new ContentDetailDescriptor();
contentDetail.ContentTemplate = (DataTemplate)FindResource("EmployeeNotes");
contentDetail.HeaderContent = "Notes";
TabViewDetailDescriptor tabDetail = new TabViewDetailDescriptor();
tabDetail.DetailDescriptors.Add(dataControlDetail);
tabDetail.DetailDescriptors.Add(contentDetail);
grid.DetailDescriptor = tabDetail;
}
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim newGrid As GridControl = CreateGrid()
AddDetailsToGrid(newGrid)
Grid.SetRow(newGrid, 2)
mainGrid.Children.Add(newGrid)
End Sub
Private Function CreateGrid() As GridControl
Dim newGrid As New GridControl()
newGrid.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew
newGrid.View = New TableView()
TryCast(newGrid.View, TableView).AutoWidth = True
TryCast(newGrid.View, TableView).ShowGroupPanel = False
newGrid.View.DetailHeaderContent = "Employees"
newGrid.ItemsSource = Employees
Return newGrid
End Function
Private Sub AddDetailsToGrid(ByVal grid As GridControl)
Dim dataControlDetail As New DataControlDetailDescriptor()
dataControlDetail.ItemsSourcePath = "Orders"
Dim detailGrid As New GridControl()
dataControlDetail.DataControl = detailGrid
detailGrid.AutoGenerateColumns = AutoGenerateColumnsMode.AddNew
detailGrid.View.DetailHeaderContent = "Orders"
TryCast(detailGrid.View, TableView).ShowGroupPanel = False
Dim contentDetail As New ContentDetailDescriptor()
contentDetail.ContentTemplate = CType(FindResource("EmployeeNotes"), DataTemplate)
contentDetail.HeaderContent = "Notes"
Dim tabDetail As New TabViewDetailDescriptor()
tabDetail.DetailDescriptors.Add(dataControlDetail)
tabDetail.DetailDescriptors.Add(contentDetail)
grid.DetailDescriptor = tabDetail
End Sub
See Also