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:
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:
Ahora bien, si quieres jugar un poco mas, puedes darle click al centro de la Grilla:
Con lo cual nos aparecerán opciones de configuración de la grilla, en mi caso, cambié el tipo de vista y el tema:
con lo cual, nos queda algo mas chévere:
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
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.
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
soy nuevo en esto de wpf me podrias recomendar algo donde me pueda guiar bien
Muchas gracias
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
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….
como puedo hacerle para actualizar el datagrid cada vez que inserto actualizo o borro algun dato
me funciono como lo tienes tu gracias
Oye men si podias ilustrar los primeros pasos es que no aparece el codeg behin o eso que mencionaste o donde pongo el codigo para entender mejor.
Esa conexión fue hecha con un control de xceed, no con el de wpf “estándar”, posteriormente publicaré una entrada explicando bien los pasos, salu2! =)
Saludos hectorperez … quisiera saber si puedes colgar el codigo fuente del ejemplo para descargarlo … en el anterior solo esta el ejecutable …. Gracias de antemano…