Tengo un DataTable llamado dt1 que contiene muchos datos. Entre esos datos hay dos columnas llamadas "Nombre y Apellido" y "Edad". Deseo poner en otro DataTable los datos de todas las personas mayores de 18 años y que no sean Juan Perez ó Juan Pérez.
Los DataTables tienen una propiedad Select que acepta consultas tipo SQL para filtrar datos en función a los nombres de sus columnas. Si estos nombres contienen espacios se deben poner entre corchetes.
El código es el siguiente:
string query = @"([Nombre y Apellido] <> 'Juan Perez' or
[Nombre y Apellido] <> 'Juan Pérez') and Edad > 18";
DataTable dtFin = new DataTable();
DataRow[] miFiltro = dt1.Select(query);
if (miFiltro.Length > 0)
{
// primero añado las columnas con su respectivo nombre
for (int i = 0; i < miFiltro[0].Table.Columns.Count; i++)
dtFin.Columns.Add(miFiltro[0].Table.Columns[i].ColumnName);
// añado las filas
for (int i = 0; i < miFiltro.Count(); i++)
dtFin.Rows.Add(miFiltro[i]);
}
Pero al correr este código me tiraba una exceción del tipo "ArgumentException Esta fila ya pertenece a otra tabla".
Buscando en Internet, Pedro Hurtado me dió la solución. (yo no hice la pregunta, pero que es la solución, lo es :D)
El código correcto es:
string query = @"([Nombre y Apellido] <> 'Juan Perez' or
[Nombre y Apellido] <> 'Juan Pérez') and Edad > 18";
DataTable dtFin = new DataTable();
DataRow[] miFiltro = dt1.Select(query);
if (miFiltro.Length > 0)
{
// primero añado las columnas con su respectivo nombre
for (int i = 0; i < miFiltro[0].Table.Columns.Count; i++)
dtFin.Columns.Add(miFiltro[0].Table.Columns[i].ColumnName);
// añado las filas
for (int i = 0; i < miFiltro.Count(); i++)
dtFin.Rows.Add(miFiltro[i].ItemArray);
}
Faltaba ponerle la propiedad ItemArray al añadir los DataRows de miFiltro al DataTable dtFin.
Códigos de ejemplo para aprender distintas tecnologías, o lo que sucede cuando a una cuarentona se la deja sola con una computadora
Acerca de:
Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)
jueves, 29 de noviembre de 2012
sábado, 17 de noviembre de 2012
Convertir los datos en la propiedad DataSource de un DataGridView en un DataTable
Se pueden convertir, ó pasar, los datos almacenados en la propiedad DataSource de un DataGridView a un DataTable con el siguiente código:
Este código no funciona para casos en que los datos se añadieron al DataGridView con el método "Add" de las propiedades "Rows" y "Columns", dado que éstas no modifican a la propiedad "DataSource".
Por ejemplo, en el siguiente código:
El DataGridView se ve así:
Pero el DataTable "dt" es nulo, pues la propiedad "DataSource" no tiene ningún valor asignado.
DataTable dt = (DataTable)miDataGridView.DataSource;
Este código no funciona para casos en que los datos se añadieron al DataGridView con el método "Add" de las propiedades "Rows" y "Columns", dado que éstas no modifican a la propiedad "DataSource".
Por ejemplo, en el siguiente código:
miDataGridView.DataSource = null;
miDataGridView.Columns.Add("p1", "Prueba 1");
miDataGridView.Columns.Add("p2", "Prueba 2");
object[] obj = {"p1", "p2"};
miDataGridView.Rows.Add(obj);
DataTable dt = (DataTable)miDataGridView.DataSource;
miDataGridView.Columns.Add("p2", "Prueba 2");
object[] obj = {"p1", "p2"};
miDataGridView.Rows.Add(obj);
DataTable dt = (DataTable)miDataGridView.DataSource;
El DataGridView se ve así:
Pero el DataTable "dt" es nulo, pues la propiedad "DataSource" no tiene ningún valor asignado.
Suscribirse a:
Entradas (Atom)