Uso de ItemProperties y Columnas para personalizar tu DataGrid

Esta vez, vamos a echar un vistazo a estas propiedades con más detalle, para aprender más acerca de lo que AutoCreateItemProperties y AutoCreateColumns realmente hacen, y cómo podemos utilizarlas para personalizar las ItemProperties y Columns en lugar de dejar que el DataGrid cargue todo automáticamente.

Más información Xceed DataGrid para WPF

En el artículo anterior, repasamos los conceptos básicos para añadir Xceed DataGrid para WPF a un nuevo proyecto de aplicación WPF. Habíamos terminado con una nota acerca de cómo tanto el AutoCreateItemProperties propiedad en DataGridCollectionViewSourcey el AutoCreateColumns propiedad en DataGridControlson verdaderos por defecto.

Esta vez, vamos a ver estas propiedades con más detalle, para saber más sobre lo que el AutoCreateItemProperties y AutoCreateColumns y cómo podemos utilizarlos para personalizar la ItemProperties y Columnas en lugar de dejar que el DataGrid cargue todo automáticamente.

Introducción

Básicamente hay dos "capas": primero la vista de colección con sus propiedades de elemento, que representa los campos de la fuente de datos; y luego las columnas en el DataGrid, que representa los campos que deben estar presentes en la rejilla. En ambos niveles, es posible dejar que Xceed DataGrid para WPF detecte automáticamente todos los campos y los incluya, o elegir especificarlos explícitamente.

DataGridCollectionView / AutoCreateItemProperties

En DataGridCollectionView se utiliza para envolver cualquier colección que implemente el método IEnumerable para agrupar, ordenar o filtrar.

En AutoCreateItemProperties se establece en verdadero (valor por defecto), se creará automáticamente una propiedad de elemento en la vista de colección para cada campo que se encuentre en la tabla (u otra) utilizada como fuente de la vista de colección.

Por ejemplo:

<xcdg:DataGridCollectionViewSource x:Key="cvs_products"
	Source="{Binding Source={x:Static Application.Current}, Path=Products}">

</xcdg:DataGridCollectionViewSource>

Sin embargo, puede que la fuente tenga cientos de columnas y sólo queramos algunas concretas. En este caso querremos establecer AutoCreateItemProperty a falso y especifique las columnas que desea incluir.

Por ejemplo:

<xcdg:DataGridCollectionViewSource x:Key="cvs_products"
	Source="{Binding Source={x:Static Application.Current}, Path=Products}"
	AutoCreateItemProperties="False">

	<xcdg:DataGridCollectionViewSource.ItemProperties>
		<xcdg:DataGridUnboundItemProperty Name="ProductID" Title="ID" />
		<xcdg:DataGridUnboundItemProperty Name="ProductName" Title="Name" />
		<xcdg:DataGridUnboundItemProperty Name="ProductPrice" Title="Price" />
	</xcdg:DataGridCollectionViewSource.ItemProperties>
</xcdg:DataGridCollectionViewSource>

También es posible "añadir" datos sin vincular a un elemento de datos mediante el uso de propiedades de elementos sin vincular, que se representan mediante la propiedad DataGridUnboundItemProperty clase. Estas propiedades de elementos no vinculados pueden utilizarse para proporcionar datos adicionales, como columnas calculadas

Por ejemplo:

<xcdg:DataGridCollectionViewSource x:Key="cvs_products"
	Source="{Binding Source={x:Static Application.Current}, Path=Products}">
		<xcdg:DataGridCollectionViewSource.ItemProperties>

		<xcdg:DataGridUnboundItemProperty Name="TotalUnitsValue"
							DataType="{x:Type sys:Double}"
							QueryValue="DataGridUnboundItemProperty_QueryValue" />

	</xcdg:DataGridCollectionViewSource.ItemProperties>
</xcdg:DataGridCollectionViewSource>

DataGridControl / AutoCreateColumns

En de DataGridControl representa las columnas que están presentes en la rejilla de datos. Las columnas pueden estar visibles u ocultas, pero están presentes para ser utilizadas por la rejilla.

En AutoCreateColumns se establece en verdadero (valor por defecto), se creará automáticamente una columna en el archivo de DataGridControl para cada propiedad de artículo que se encuentre en DataGridCollectioView (u otro) que se estableció como de DataGrid fuente.

Por ejemplo:

<xcdg:DataGridControl x:Name="OrdersGrid"
	ItemsSource="{Binding Source={StaticResource cvs_products}}">

</xcdg:DataGridControl>

Sin embargo, quizás sólo queramos un subconjunto para las columnas de nuestra cuadrícula. En este caso querremos establecer AutoCreateColumns a false y especificar qué columnas incluir.

Por ejemplo:

<xcdg:DataGridControl x:Name="OrdersGrid"
	ItemsSource="{Binding Source={StaticResource cvs_products}}"
	AutoCreateColumns="False">

	<xcdg:DataGridControl.Columns>
		<xcdg:Column FieldName="ProductID" Title="ID" />
		<xcdg:Column FieldName="ProductName" Title="Name" />
		<xcdg:Column FieldName="ProductPrice" Title="Price" />
	</xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

También es posible añadir columnas no enlazadas. Éstas representan una columna que puede utilizarse para mostrar información no relacionada con los datos, como una etiqueta o controles que permitan realizar algún tipo de acción (por ejemplo, un botón para abrir una ventana en la que pueda editarse el elemento actual).

Por ejemplo:

<xcdg:DataGridControl x:Name="OrdersGrid"
	ItemsSource="{Binding Source={StaticResource cvs_products}}">

	<xcdg:DataGridControl.Columns>
		<xcdg:UnboundColumn FieldName="EditRowColumn" Width="30">
			<xcdg:UnboundColumn.CellContentTemplate>
				<DataTemplate>
					<Button Click="Button_Click" Content="..." />
				</DataTemplate>
			</xcdg:UnboundColumn.CellContentTemplate>
		</xcdg:UnboundColumn>
	</xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

Para más información, consulte el documentación.