viernes, 17 de marzo de 2017

Impedir datos repetidos en un DataGridView C#


Ver video youtube  Ver video

En el mundo de la programación de computadoras (diseño de software), en la que interviene un sinnúmero de situaciones que a menudo nos frustramos con ciertos métodos que no son simples de controlar, surge la necesidad de buscar en la internet códigos que nos ayuden o nos den una idea más clara de cómo controlar este proceso en nuestro proyecto, esto no significa que no estemos en la capacidad de desarrollar nuestros propios métodos sino por la necesidad de reducir tiempo en desarrollar un programa informático.

De aquí, partiendo de esta incógnita me propuse en desarrollar ciertos métodos que ayuden de alguna manera al desarrollo de aplicaciones informáticas que ayudaran a los usuarios comunes simplificar de manera significativa los procesos manuales realizados a diario.

En ocasiones nos encontramos con la necesidad de hacer validaciones un poco complejas, como es el caso, de que, al momento de ingresar datos a un DataGridView, no se introduzcan registros repetidos, este pequeño ejemplo mostrara una manera de realizar esta actividad.

Por tal motivo voy a explicar cómo hacer este proceso de una manera sencilla pero eficaz.

Para este ejemplo utilizaremos el siguiente Formulario.




*En el código fuente podrás observar los nombres de cada control.

Por otra parte, vamos a utilizar propiedades creadas por el usuario para ir utilizando estas técnicas en nuestros proyectos, el uso de propiedades nos ayudan a manipular los datos ingresados en la grilla.



Clase Clientes.

public class Clientes
    {
        //propiedades publicas
        //esta clase contendra todos los clientes agregados
        public int Codigo { get; set; }
        public string Apellidos { get; set; }
        public string Nombres { get; set; }
    }

Esta clase contiene las propiedades que vamos a utilizar como campos para almacenar los datos de los clientes.

Código fuente del formulario

En primera instancia se debe crear un objeto que permita agregar todos los clientes ingresados, para luego ser mostrado en un DataGridView, para ello vamos a utilizar la clase List(T) que es proporcionada por el Espacio de nombres:   System.Collections.Generic


        //objeto que almacenara los datos ingresados
        public List<Clientes> _listaClientes = new List<Clientes>();

En este objeto llamado _listaClientes se agregarán todos los clientes.

Vamos a utilizar también una función la cual tendrá un valor vital en este ejemplo, por es aquí donde configuraremos al programa para que valide si existe un cliente ya ingresado.

        //función que cumple con el objetivo de verificar si existe
        //en la lista y si no lo agregar a la lista

        public bool agregarCliente(Clientes cliente)
        {
            //comprobar si existe en la lista
            //utilizando una simple consulta Linq
            bool existe = _listaClientes.Any(x => x.Codigo.Equals(cliente.Codigo));

            //preguntamos si existe
            if (!existe )
            {
                //sino existe lo agregamos
                _listaClientes.Add(cliente);
                //limpiamos el datagrid
                dataGridView1.DataSource = null;
                //mostramos los datos
                dataGridView1.DataSource = _listaClientes;

                //enviamos que se agrego
                return true;
            }
            //caso contrario enviamos que no se agrego
            return false;
        }

Como podrán observar aquí se utiliza una consulta Linq(Language Integrated Query) para comparar datos: _listaClientes.Any(x => x.Codigo.Equals(cliente.Codigo));, y luego solo se procede a validar resultado que es de tipo bool.


Otra cosa que se debe destacar, es la forma de cómo se agregar una cliente a la lista:
    _listaClientes.Add(cliente);

También se ha creado una pequeña función de limpiar los cuadros de textos.
void limpiarTXT()
        {
            txtCodigo.Text = "";
            txtApellidos.Text = "";
            txtNombres.Text = "";
        }

Por último, la codificación del botón Agregar. En él está el comando de controlar que se valide cuando el usuario empiece a ingresar los datos al control Grid.

private void btnAgregar_Click(object sender, EventArgs e)
        {
            //creamos un objeto para validar datos de ingreso
            Clientes lineanueva = new Clientes()
            {
                Codigo = Int32.Parse(txtCodigo.Text),
                Apellidos = txtApellidos.Text,
                Nombres = txtNombres.Text
            };
            //invocamos a la funcion agregar clientes
            if (!agregarCliente(lineanueva))
            {
                MessageBox.Show("Este código ya esta ingresado", "Revise");
            }
            limpiarTXT();
        }

CONCLUSION
Este simple proceso podemos controlar que no se repitan datos en un DataGridView. Este simple código ustedes le pueden dar el uso que deseen, mejorarlo para que sea más eficiente y eficaz y que compartan los cambios realizados en él.
Esta lógica utilizada en este pequeño ejemplo, puede ser implementada en cualquier método en el que se utilice LISTAS GENÉRICAS.


Ver vídeo youtube  Ver vídeo

Nota: Si necesitan la ayuda para resolver algún tema en particular, no duden en solicitarlo más abajo.


CUADRE DE CAJA TOUCH EN C#. Ver vídeo de demostración Que tal, en los actuales momentos la tecnología informática es una de las princ...