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

sábado, 18 de febrero de 2012

Tutorial: Creando Arrays de Controles con sus Eventos en C# y usándolos al estilo VB6

Al programar en C# siempre eché en falta el no poder crear arrays de controles al estilo Visual Basic 6.  Fue después de probar un poco que descubrí que .Net, además de admitir arrays de controles, también se les puede asignar eventos de tal forma que el código se comporte de modo muy similar al viejo VB6, donde se identifican a los controles del array mediante un índice.
El tutorial ya está subido a la sección de C# de: http://electronicaamartillazos.co.nr/
Link directo Aquí.
Un Mirror: Aquí.

Incluye cómo enviar un mensaje a otra ventana (formulario) desde un control creado dentro del Array.

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: