Bien, pues esta es una pregunta que me ha llegado hoy, así que he decidido escribir sobre esto hoy.

Antes que nada; ¿Qué control usar?

Bien, los que ya están mas adentrados en esto, sabrán que actualmente el control DataGridView existente en Windows Forms no existe en WPF, pero sí en silverlight, así que, lo que yo les recomiendo es usar un control ya existente y que es gratuito, se llama Xceed DataGrid for WPF, y lo puedes descargar desde aquí:

http://xceed.com/Grid_WPF_Intro.html

Tienes que registrarte para que te den un serial válido, la verdad es un control muy sencillo de usar, vale si no estás convencido puedes echarle un vistazo al demo aquí:

http://xceed.com/Grid_WPF_Demo.html

Bien, si ya has descargado e instalado el control, lo que tienes que hacer es :

1.- Importar las librerías necesarias, yo lo he hecho desde Visual Studio, ya has de saber, click derecho sobre el proyecto, agregar referencias, e importas todas las que empiecen con XCeed(XCeed.Controls,XCeed.Datagrid… etc).

Una vez hecho esto, si vas a tu ToolBar, notarás que tienes nuevos controles disponibles para insertar, en este caso debes insertar el DataGridControl:

datagrid1

Como puedes observar, el control es insertado inmediatamente, y a la vez Visual Studio nos genera el código necesario para hacer referencia al namespace.

2.- Vale lo siguiente es configurar el control desde XAML, esto lo haremos agregando 2 atributos a nuestro control, los atributos serán:

x:Name=”playersGrid” ItemsSource=”{Binding}

O sease agregamos un nombre a la grilla para que pueda ser usada desde código, y la fuente de datos de la misma, en este caso solo ponemos Binding, el cual hará binding con lo generado desde el código C#.

A continuación, vamos a nuestro archivo Code behind, y agregamos lo siguiente:

 

 

protected override void OnInitialized(EventArgs e)
{

    DataSet ds;

    base.OnInitialized(e);

    ds = getData();

    playersGrid.DataContext = ds.Tables[“cliente”];

}

private DataSet getData()
{

    string connString = string.Format(“Data Source=HÉCTOR1\\SQLEXPRESS; AttachDbFilename=|DataDirectory|\\Libreria.mdf; Integrated Security=True; User Instance=True”);

    SqlConnection conn = new SqlConnection(connString);

    DataSet dataSet = new DataSet();

    SqlDataAdapter playersAdapter = new SqlDataAdapter();

    playersAdapter.SelectCommand = new SqlCommand(“Select cve_cliente, nombre, paterno, materno, calle, ciudad from cliente”, conn);

    playersAdapter.Fill(dataSet, “cliente”);

    return dataSet;

}

 

Básicamente, aquí lo que hago es hacer una conexión con mi servidor de Base de Datos, hago la consulta correspondiente y regreso el dataset cliente, el cual entrará en el DataContext de la grilla. Si quieres probar con tu base de datos, tienes que cambiar:

“Data Source=NOMBRE_DE_TU_SERVIDOR;

DataDirectory|\\TU_BASE_DE_DATOS.mdf;

 

(“Select cve_cliente, nombre, paterno, materno, calle, ciudad from cliente” POR TU SENTENCIA SQL,

“cliente” por la tabla que quieres meter en el DataContext.

Con todo esto, el resultado será algo como esto:

datagrid3

Ahora bien, si quieres jugar un poco mas, puedes darle click al centro de la Grilla:

datagrid4

Con lo cual nos aparecerán opciones de configuración de la grilla, en mi caso, cambié el tipo de vista y el tema:

datagrid5

con lo cual, nos queda algo mas chévere:

datagrid6 

Espero que les haya sido de utilidad, un saludo, por cierto, igual pudiste haber utilizado el mismo control DataGridView usado en el framework 2, pero por el momento creo que esto es mejor no? Salu2

Link del proyecto: EjemploDataGrid.rar-download

Héctor Pérez

¡Califica la publicación!
[Total: 0 Promedio: 0]

9 Comentarios

  1. Por más que trato no me aparecen los controles. Cuando los agrego desde las referencias, no aparece nada.
    Si los agrego desde las fichas de controles, ya están seleccionados, simplemente: NO APARECEN.

    He probado con dos versiones distintas, y la otra si me aparecian, pero cuando ejecutaba la aplicación, siempre, pero SIEMPRE me daba operación ilegal, y era por el control grid, aunque simplemente pusiera el control SIN enlace a BD, siempre daba error y nunca pude encontrar porqué.
    Así que estoy condenado a nunca poder usar Blend con acceso a datos que no sea XML :S

    Cualquier sugerencia, háganmela saber a freezer27@gmail.com

    Gracias.

  2. Buenas tardes Hector, El link que tienes para el codigo fuente del ejercicio no funiona, tambien te quiero preguntar si no tienes algun ejemplo para enlazar un textbox con WPF a una base de datos

    PD. de antemano muchas gracias…. haces muy buenos aportes
    mi correo: blackdeath_166@hotmail.com

  3. Hola giovany, qué tal? Bueno, para empezar, te recomiendo este curso gratuito de Microsoft Learning, es sobre XAML, y es gratuito:

    https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=128213&tab=overview

    Si quieres algo mas avanzado, te recomiendo algún libro de O´Reilly que en lo personal, me gustan mucho:

    Programming WPF, Second Edition
    Building Windows UI with Windows Presentation Foundation

    http://oreilly.com/catalog/9780596510374/

    Salu2

  4. perdon que comente un poco tarde XD pero igual servira para otras personas esta prgunta o creo ke ya se lo han preguntado..

    puedo usar mas de dos datagrid de xceed en un mismo proyecto?
    en caso de que se pudiera como lo tengo ke hacer?

    estas preguntas se me vinieron a raiz de que no puedo meter mas de 1 al proyecto que tengo en c# .NET…

    este es mi codigo:

    public partial class App : Application
    {
    protected override void OnStartup(StartupEventArgs e)
    {
    base.OnStartup(e);
    Xceed.Wpf.DataGrid.Licenser.LicenseKey = “LA MIA QUE TENGO XD”;
    base.OnStartup(e);
    }
    static App()
    {
    DataSet dataSet = new DataSet();
    string connString = “Server=martinpc;Database=sonorameat;uid=sa;pwd=;”;
    SqlConnection sqlConnection = new SqlConnection(connString);
    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
    sqlDataAdapter.SelectCommand = new SqlCommand(“SELECT * FROM tiendas ORDER BY id_tienda asc;”, sqlConnection);
    sqlDataAdapter.Fill(dataSet, “id_tienda”);
    m_orders = dataSet.Tables[“id_tienda”];
    }
    public static DataTable Orders
    {
    get
    {
    return m_orders;
    }
    }
    private static DataTable m_orders;

    }

    esto en en la app.xaml.cs

    intente poniendostatic App() en otra ventana pero no me dejo pk no regresa la key y no se como poner mas de 1

    muchas gracias….

  5. Saludos hectorperez … quisiera saber si puedes colgar el codigo fuente del ejemplo para descargarlo … en el anterior solo esta el ejecutable …. Gracias de antemano…

Dejar respuesta

Please enter your comment!
Please enter your name here