Mostrando entradas con la etiqueta Tip. Mostrar todas las entradas
Mostrando entradas con la etiqueta Tip. Mostrar todas las entradas

domingo, 13 de octubre de 2013

[Tip] Obtener todos los controles de un formulario de un tipo en especifico

En muchas ocasiones requerimos buscar todos los controles de un tipo en especifico que tenemos en nuestros formularios, por ejemplo si tenemos muchos TextBox y queremos comparar sus valores sin tener que hacerlo uno a uno, o si por ejemplo agregamos dinamicamente N controles a nuestro formulario o algún contenedor, para lograr esto muchas veces recurrimos a un ciclo que recorra cada control de nuestro formulario y pregunte por su tipo para realizar una acción o no, pues bueno voy a mostrar una forma mucho más sencilla de hacerlo.

En nuestro ejemplo vamos tener N TextBox contenidos en un panel, y el objetivo es validar si algún TextBox tiene un Text repetido con otro:

Primero obtenemos todos los controles de tipo TextBox contenidos en nuestro panel, de la siguiente forma:

var controles = this.pnlControles.Controls.OfType<TextBox>();

Ahora ya tenemos una colección con todos los TextBox que necesitamos, ya podemos realizar las consultas Linq o Lambda que requiramos, en nuestro caso usaremos la siguiente:

if (controles.Count(c => c.Text != string.Empty && c.Text.Equals(c.Text)) >= 2)
                MessageBox.Show("Repetido con otro TextBox");

A través de la Lambda Expression preguntamos si existe un algún TextBox con Text repetido, con esto podemos realizar cualquier tipo de validación que necesitemos.

Eso es todo, espero les sea de utilidad.

Saludos!!

viernes, 11 de octubre de 2013

[Tip] Realizar consultas a través de Lambda Expressions en un DataSet con tablas relacionadas

En muchas de nuestras aplicaciones necesitamos persistir datos en memoria para usarlos a lo largo de la interacción del usuario en muchos ámbitos del sistema, en muchas de estas ocasiones optamos por el uso de los famosos DataSet, en los cuales almacenamos N DataTable, y cuando necesitamos creamos relaciones entre estos para optimizar y realizar consultas sobre ellos con mayor facilidad. por eso vamos a observar como podemos realizar consultas sobre DataTable relacionados a través de Lambda Expressions, y para eso crearemos un DataSet con la siguiente estructura:

            DataTable categorias = new DataTable();
            categorias.Columns.Add("id", typeof(int));

            DataTable productos = new DataTable();
            productos.Columns.Add("id", typeof(int));
            productos.Columns.Add("name", typeof(string));

            for (int i = 1; i < 4; i++)
            {
                categorias.Rows.Add(i);
            }

            Random rd = new Random(DateTime.Now.Millisecond);
            for (int i = 1; i < 11; i++)
            {
                productos.Rows.Add(rd.Next(1, 4), "Name" + i);
            }

            DataSet ds = new DataSet();
            ds.Tables.Add(categorias);
            ds.Tables.Add(productos);
            ds.Relations.Add(categorias.Columns[0], productos.Columns[0]);

Ahora veamos como realizar una consulta filtrando por el campo name:

var likejoin = category.Rows.OfType<DataRow>().Join(product.Rows.OfType<DataRow>(), cat => cat.Field<int>("id"),
prod => prod.Field<int>("id"), (cat, prod) => new { Id = cat.Field<int>("id"),
Nombre = prod.Field<string>("name") }).Where(c => c.Nombre.Contains("ElTavo"));

Observemos que a través de la extensión Join relacionamos las tablas que necesitemos, y debemos especificar la tabla de relación seguido de los campos de llave primaria que relacionaran las tablas, posteriormente especificamos que campos de las tablas vamos a mostrar en el resultado y por ultimo aplicamos la sentencia WHERE en este caso para filtrar los productos cuyo nombre contenga la palabra ElTavo.

Eso es todo, espero les sea de utilidad.

Saludos!!

jueves, 26 de septiembre de 2013

[Tip] Extraer cadenas de una cadena principal con expresiones regulares

En muchas ocasiones necesitamos extraer palabras o caracteres que cumplan con ciertas condiciones de una cadena mayor, hay muchas formas de hacerlo unas más laboriosas o menos genéricas que otras, para este tipo de casos nos son muy útiles las expresiones regulares, como en el siguiente ejemplo, se necesita extraer las palabras encerradas en [corchetes] de una cadena, esto lo podemos lograr de la siguiente forma:

Cadena: [EDAD]:25:NUMERICO;[SUELDO]:1200:NUMERICO;[ESTADOCIVIL]:'C':TEXTO

string pattern = Regex.Escape("[") + "(.*?)]";
string input = "[EDAD]:25:NUMERICO;[SUELDO]:1200:NUMERICO;[ESTADOCIVIL]:'C':TEXTO";

MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
     Response.Write(match.Value);

Observemos que con la instrucción Regex.Escape indicamos que no los caracteres especiales no sean tenidos en cuenta como parte de la expresión regular si no como parte del patrón que deseamos buscar.

El resultado que imprime nuestro algoritmo es:

[EDAD][SUELDO][ESTADOCIVIL]

Espero les sea de utilidad.

Saludos!!