Más información Xceed DataGrid para WPF
Bienvenido a esta nueva serie. Esta vez vamos a ver el Xceed DataGrid para WPF.
Empezaremos despacio con lo básico, y luego cubriremos varios temas y características para aprender a sacar el máximo partido del DataGrid en tus proyectos.
Configuración inicial
Empecemos creando un nuevo proyecto de aplicación WPF y añadiendo las referencias a los ensamblados que necesitaremos.
Hay ensamblados para ThemePacks y para 3D Views, pero los dejaremos para más adelante.
Por ahora sólo añadiremos los siguientes conjuntos:
- Xeed DataGrid para WPF
- Controles Xceed para WPF
- Xceed.Wpf.DataGrid.Samples.SampleData
Asignación de espacios de nombres
Una vez añadidos los ensamblados a nuestro nuevo proyecto, hay que declarar los mapas de espacios de nombres que se van a utilizar.
En XAML esto se hace utilizando el atributo xmlns:
xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid"
Nota: Si el control DataGridControl se ha añadido a una superficie de diseño, el atributo xmlns se añade automáticamente.
La colección de esquemas de Xceed DataGrid para WPF contiene muchos espacios de nombres. Utilizando se pueden utilizar para crear alias para los espacios de nombres que queremos utilizar en nuestro proyecto.
using Xceed.Wpf.DataGrid;
using Xceed.Wpf.DataGrid.Converters;
using Xceed.Wpf.DataGrid.Print;
using Xceed.Wpf.DataGrid.Stats;
using Xceed.Wpf.DataGrid.ValidationRules;
using Xceed.Wpf.DataGrid.Views;
using Xceed.Wpf.DataGrid.Views.Surfaces;
using Xceed.Wpf.Controls;
using Xceed.Wpf.DataGrid.ThemePack;
using Xceed.Wpf.DataGrid.Settings;
using Xceed.Wpf.DataGrid.Export;
Encuadernación
Por último, añadiremos una rejilla a nuestra página o ventana. Los ejemplos que se encuentran a lo largo de la documentación suelen colocar la rejilla dentro de un elemento Rejilla, como se demuestra a continuación.
Ejemplo 1: cómo crear una conexión a la versión Access de la base de datos Northwind y crear una propiedad llamada "Pedidos" a la que se vinculará la rejilla.
using System.Data.OleDb;
using System.Data;
static App()
{
DataSet dataSet = new DataSet();
string mdbFile = @"DataNorthwind.mdb";
string connString = String.Format( "Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}", mdbFile );
OleDbConnection conn = new OleDbConnection( connString );
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand( "SELECT * FROM Orders;", conn );
adapter.Fill( dataSet, "Orders" );
m_orders = dataSet.Tables[ "Orders" ];
}
public static DataTable Orders
{
get
{
return m_orders;
}
}
private static DataTable m_orders;
Ejemplo 2: cómo enlazar una rejilla a la tabla Pedidos, que se recupera a través de la propiedad Pedidos implementada en el código anterior.
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">
<Grid.Resources>
<xcdg:DataGridCollectionViewSource x:Key="cvs_orders"
Source="{Binding Source={x:Static Application.Current},
Path=Orders}"/>
</Grid.Resources>
<xcdg:DataGridControl x:Name="OrdersGrid"
ItemsSource="{Binding Source={StaticResource cvs_orders}}"/>
</Grid>
dataGridControl.ItemsSource = new DataGridCollectionView( App.Orders.DefaultView );
Por defecto, una cuadrícula ocupará todo el espacio que necesite; por lo tanto, si no se le impone una restricción de tamaño, como cuando se coloca en un espacio StackPanel, y hay una gran cantidad de elementos de datos, se perderá la virtualización de la interfaz de usuario, lo que se traducirá en una importante pérdida de rendimiento.
Para preservar la virtualización de la interfaz de usuario cuando una red está en un StackPanel, el Anchura máxima y Altura máxima propiedades (o Anchura y Altura) para limitar la cuadrícula. Como alternativa, se puede utilizar un DockPanel o Rejilla ya que ambos imponen restricciones de tamaño a sus elementos hijos.
Licencias
El último paso es obtener la licencia de Xceed DataGrid para WPF mediante la configuración de la propiedad LicenseKey propiedad.
Existen 2 posibles escenarios de concesión de licencias:
- Utilizar el modo de prueba.
- Todas las funciones están disponibles y pueden evaluarse durante el periodo de prueba, tras el cual se lanzará una excepción. Para utilizar este modo, no se necesita ninguna clave de licencia.
- Licenciar el componente con una clave no de prueba (comienza con DGP)
- Las claves de licencia del producto desbloquean permanentemente el conjunto completo de funciones del componente
Nota: la versión de la clave de licencia debe corresponder a la versión de los ensamblajes.
En LicenseKey propiedad del Licencia debe establecerse con una clave de licencia válida antes de llamar a cualquier otro método del componente Xceed. Si se utiliza una clave de licencia no válida o una clave de prueba caducada, o se licencia en el lugar equivocado del código, se lanzará una excepción en tiempo de ejecución.
Se recomienda que el LicenseKey en una de las siguientes ubicaciones:
- La ubicación preferida para establecer la propiedad LicenseKey es en el método Application.OnSatartup.
- La propiedad LicenseKey también puede establecerse en los eventos Window.Loaded o Page.Loaded, siempre que la página o ventana de inicio sea conocida e invariable.
Ajuste del LicenseKey propiedad del Licencia definida en el ensamblado Xceed.Wpf.DataGrid licenciará automáticamente las clases del ensamblado Xceed.Wpf.Controls.
El siguiente código muestra cómo establecer el parámetro LicenseKey en la sobreescritura del método Application.OnStartup.
protected override void OnStartup( StartupEventArgs e )
{
Xceed.Wpf.DataGrid.Licenser.LicenseKey = "DGP70-xxxxx-xxxxx-xxxx";
base.OnStartup( e );
}
Ejemplo
Aunque es posible especificar qué propiedades de elemento de la fuente de datos deben incluirse, y qué columnas deben mostrarse, veremos esas opciones más adelante. Para este ejemplo, dejaremos que la rejilla cargue automáticamente todas las propiedades de elemento encontradas en la fuente de datos, y crearemos todas las columnas correspondientes en el DataGrid.
<Window.Resources>
<xcdg:DataGridCollectionViewSource x:Key="mySource"
AutoCreateItemProperties="True"
Source="{Binding Source={x:Static Application.Current}, Path=RecordData}" />
</Window.Resources>
<Grid>
<xcdg:DataGridControl x:Name="myGrid"
AutoCreateColumns="True"
ItemsSource="{Binding Source={StaticResource mySource}}" >
</xcdg:DataGridControl>
</Grid>
Nota: tanto el AutoCreateItemProperties propiedad en DataGridCollectionViewSource, y el AutoCreateColumns propiedad en DataGridControl, son verdadero por defecto. Si no se hubieran especificado, el resultado final habría sido el mismo.
Para más información, consulte el documentación.