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 :)

lunes, 13 de febrero de 2012

Añadir y remover columnas, y manipular datos de un DataTable en C#

Tengo un método que me devuelve un DataTable con los siguientes datos:

 


Lo que necesito es tener en el DataTable sólo las cadenas que están después del primer espacio en blanco (por ejemplo, si se desea separar apellidos y nombres).

Las columnas del DataTable no son necesariamente son del tipo string (pueden ser Date Time o tipos numéricos), si todas las columnas fueran tipo String sería fácil extraer las subcadenas. Cambiar el valor de la propiedad ValueType de las columnas no funciona cuando el DataTable ya tiene datos.

Lo que se me ocurrió fue crear cuatro columnas nuevas que almacenaran datos tipo string, leer el dato correspondiente de cada fila de cada columna original, convertirlo a cadena de caracteres, extraer las subcadenas que necesito, copiarlas a la fila respectiva de una de las columnas nuevas.

Este es el método que me devuelve el DataTable sólo con las subcadenas (las que están después del espacio en blanco):


            DataTable dTable = algunMetodo();

            int col = dTable.Columns.Count;

            dTable.Columns.Add("T11", typeof(string));
            dTable.Columns.Add("T22", typeof(string));
            dTable.Columns.Add("C11", typeof(string));
            dTable.Columns.Add("C22", typeof(string));

            for (int i = 0; i < dTable.Rows.Count; i++)
                for (int j = 0; j < col; j++)
                {
                    string subcadena;
                    int n;

                    subcadena = dTable.Rows[i][j].ToString();

                    n = subcadena.IndexOf(' ');
                    subcadena = subcadena.Substring(n + 1);
                    dTable.Rows[i][j + col] = subcadena;
                }

            // esta parte es opcional si no se desean las columnas originales
            for (int j = 0; j < col; j++)
                dTable.Columns.Remove(dTable.Columns[j]);
            
            return dTable;

Este método recorre cada celda del DataTable, copia su contenido en una variable tipo string llamada "subcadena" y usa la instrucciones IndexOf y Substring para extraer la parte de la cadena que está después del primer espacio en blanco, la cual copia a la celda respectiva en las nuevas columnas añadidas.

Y así es como queda el DataTable:



2 comentarios:

Unknown dijo...

hola necesuto ayuda con dataset, necesito saber como hacer un blucle que elimine las filas vacias del dataset

Broken_Window dijo...

Las filas vacías están dentro de las tablas en el dataset. Para detectar filas vacías tendrías que chequear que todas sus celdas sean nulas. Escribí un poco sobre eso aquí:
http://programacionamartillazos.blogspot.com/2013/01/c-propiedad-select-de-un-datatable-un.html