Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando se usa el control DataGrid, se puede personalizar la presentación de los datos agregando una sección de detalles de fila. Agregar una sección de detalles de fila le permite agrupar algunos datos en una plantilla que está visible o contraída opcionalmente. Por ejemplo, puede agregar detalles de fila a un control DataGrid que presenta únicamente un resumen de los datos para cada fila del DataGrid, pero presenta más campos de datos cuando el usuario selecciona una fila. La plantilla para la sección de detalles de fila se define en la propiedad RowDetailsTemplate. En la ilustración siguiente se muestra un ejemplo de una sección de detalles de fila.
La plantilla de detalles de fila se define como XAML alineado o como un recurso. Ambos enfoques se muestran en los procedimientos siguientes. Una plantilla de datos que se agrega como un recurso se puede usar en todo el proyecto sin volver a crear la plantilla. Una plantilla de datos que se agrega como XAML alineado solo es accesible desde el control donde se define.
Para mostrar detalles de fila usando XAML alineado
Cree un control DataGrid que muestre datos de un origen de datos.
En el elemento DataGrid, agregue un elemento RowDetailsTemplate.
Cree un objeto DataTemplate que defina la apariencia de la sección de detalles de fila.
En el código XAML siguiente se muestra el control DataGrid y cómo definir la propiedad RowDetailsTemplate alineada. DataGrid muestra tres valores en cada fila y tres valores más cuando la fila está seleccionada.
<Window x:Class="WpfApplication1.MainWindow" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> <Grid> <DataGrid Name="dataGrid1" IsReadOnly="True" AutoGenerateColumns="False" > <DataGrid.Columns> <DataGridTextColumn Header="Company Name" Binding="{Binding CompanyName}"></DataGridTextColumn> <DataGridTextColumn Header="Contact First Name" Binding="{Binding FirstName}"></DataGridTextColumn> <DataGridTextColumn Header="Contact Last Name" Binding="{Binding LastName}"></DataGridTextColumn> </DataGrid.Columns> <DataGrid.RowDetailsTemplate> <DataTemplate> <Border BorderThickness="0" Background="BlanchedAlmond" Padding="10"> <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="12" Text="Email: " VerticalAlignment="Center" /> <TextBlock FontSize="16" Foreground="MidnightBlue" Text="{Binding EmailAddress}" VerticalAlignment="Center" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="12" Text="Phone: " VerticalAlignment="Center" /> <TextBlock FontSize="16" Foreground="MidnightBlue" Text="{Binding Phone}" VerticalAlignment="Center" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="12" Text="Sales Person: " VerticalAlignment="Center" /> <TextBlock FontSize="16" Foreground="MidnightBlue" Text="{Binding SalesPerson}" VerticalAlignment="Center" /> </StackPanel> </StackPanel> </Border> </DataTemplate> </DataGrid.RowDetailsTemplate> </DataGrid> </Grid> </Window>
En el código siguiente se muestra la consulta que se emplea para seleccionar los datos que se muestran en DataGrid. En este ejemplo, la consulta selecciona los datos de una entidad que contiene información del cliente.
Dim advenWorksEntities As AdventureWorksLT2008Entities = New AdventureWorksLT2008Entities Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim customers As ObjectQuery(Of Customer) = advenWorksEntities.Customers Dim query = _ From customer In customers _ Order By customer.CompanyName _ Select _ customer.LastName, _ customer.FirstName, _ customer.CompanyName, _ customer.Title, _ customer.EmailAddress, _ customer.Phone, _ customer.SalesPerson dataGrid1.ItemsSource = query.ToList() End Sub
private void Window_Loaded(object sender, RoutedEventArgs e) { AdventureWorksLT2008Entities advenWorksEntities = new AdventureWorksLT2008Entities(); ObjectQuery<Customer> customers = advenWorksEntities.Customers; var query = from customer in customers orderby customer.CompanyName select new { customer.LastName, customer.FirstName, customer.CompanyName, customer.Title, customer.EmailAddress, customer.Phone, customer.SalesPerson }; dataGrid1.ItemsSource = query.ToList(); }
Para mostrar detalles de fila usando un recurso
Cree un control DataGrid que muestre datos de un origen de datos.
Agregue un elemento Resources al elemento raíz, como un control Window o un control Page, o agregue un elemento Resources a la clase Application en el archivo App.xaml (o Application.xaml).
En el elemento Resources, cree un objeto DataTemplate que defina la apariencia de la sección de detalles de fila.
En el código XAML siguiente se muestra la propiedad RowDetailsTemplate definida en la clase Application.
<Application.Resources> <DataTemplate x:Key="CustomerDetail"> <Border BorderThickness="0" Background="BlanchedAlmond" Padding="10"> <StackPanel Orientation="Vertical"> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="12" Text="Email: " VerticalAlignment="Center" /> <TextBlock FontSize="16" Foreground="MidnightBlue" Text="{Binding EmailAddress}" VerticalAlignment="Center" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="12" Text="Phone: " VerticalAlignment="Center" /> <TextBlock FontSize="16" Foreground="MidnightBlue" Text="{Binding Phone}" VerticalAlignment="Center" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock FontSize="12" Text="Sales Person: " VerticalAlignment="Center" /> <TextBlock FontSize="16" Foreground="MidnightBlue" Text="{Binding SalesPerson}" VerticalAlignment="Center" /> </StackPanel> </StackPanel> </Border> </DataTemplate> </Application.Resources>
En DataTemplate, establezca x:Key (Directiva) en un valor que identifique de manera única la plantilla de datos.
En el elemento DataGrid, establezca la propiedad RowDetailsTemplate en el recurso definido en los pasos anteriores. Asigne el recurso como un recurso estático.
En el código XAML siguiente se muestra la propiedad RowDetailsTemplate establecida en el recurso del ejemplo anterior.
<DataGrid Name="dataGrid1" IsReadOnly="True" AutoGenerateColumns="False" RowDetailsTemplate="{StaticResource CustomerDetail}" > <DataGrid.Columns> <DataGridTextColumn Header="Company Name" Binding="{Binding CompanyName}"></DataGridTextColumn> <DataGridTextColumn Header="Contact First Name" Binding="{Binding FirstName}"></DataGridTextColumn> <DataGridTextColumn Header="Contact Last Name" Binding="{Binding LastName}"></DataGridTextColumn> </DataGrid.Columns> </DataGrid>
Para establecer la visibilidad e impedir el desplazamiento horizontal de los detalles de fila
Si es necesario, establezca la propiedad RowDetailsVisibilityMode en un valor DataGridRowDetailsVisibilityMode.
De manera predeterminada, el valor se establece en VisibleWhenSelected. Puede establecerlo en Visible para mostrar los detalles de todas las filas o en Collapsed para ocultar los detalles de todas las filas.
Si es necesario, establezca la propiedad AreRowDetailsFrozen en true para impedir que la sección de detalles de fila se desplace horizontalmente.