none
Ayuda con datagridview RRS feed

  • Pregunta

  • Saludos tengo que realizar este proyecto:

    la idea es que dependiendo del tipo de la cuenta (Débito o Crédito) el monto debe aparecer en la columna correspondiente. Lo realice con este codigo:

     if (cmbtipocta.Text == "Debito")
                {
                    dgvcontabilidad.Rows.Add(txtcuenta.Text, txtdescripcion.Text, txtmonto.Text, "");
                }
                else
                {
                    dgvcontabilidad.Rows.Add(txtcuenta.Text, txtdescripcion.Text,"" , txtmonto.Text);
                }
                

    sin embargo a pesar de que funciona bien, siento que es muy simple o que le falta algo. Puedo entregarlo asi o hay otra formas mas compleja o formal si se le podria decir de realizarlo. Yo considere que como solo son dos tipos de cuentas el codigo de arriba es mas que suficiente pero luego me lo encontre muy simple y quisiera saber su opinion.

    Otra cosa que me gustaria saber como hacer es como cambiar el color a los textos dentro de la celda sin afectar la columna entera. Por ejemplo que los montos de 50,000 en adelante sean de color rojo o las letras del tipo de cuenta de credito y debito sean verdes y azules. Nota: No es para este proyecto lo necesito para otro pero igual en un datagridview

    miércoles, 3 de febrero de 2016 3:24

Respuestas

  • Hola Julio,

    ambas cosas puedes hacerlas desde el evento CellFormating del grid.

    Mira este ejemplo:

            private void dgvcontabilidad_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                var grid = (DataGridView)sender;
                var column = grid.Columns[e.ColumnIndex];
                if (column.Name == "Credito" || column.Name == "Debito")
                {
                    // Establecer el color de la letra
                    decimal value;
                    if (decimal.TryParse((string) e.Value, out value) && value > 50000)
                    {
                        e.CellStyle.ForeColor = Color.Red;
                    }
                    else
                    {
                        e.CellStyle.ForeColor = (column.Name == "Credito" ? Color.Green : Color.Blue);
                    }
                    // Establece si se visualiza el valor
                    if (column.Name == "Credito" && cmbtipocta.Text == @"Débito"
                        || column.Name == "Debito" && cmbtipocta.Text == @"Crédito")
                        e.Value = null;
                }
            }
    
            private void cmbtipocta_SelectedIndexChanged(object sender, EventArgs e)
            {
                dgvcontabilidad.Refresh();
            }
    

    Si el valor de las celdas Debito o Credito es superior a 50.000 establece el color de la fuente en rojo. Si no lo establece a verde o azul dependiendo de la columna que se trate.

    A continuación si el combo tiene seleccionado un valor que no se corresponde con la columna establece el valor a null para que no se muestre. De esta forma puedes añadir el importe a las dos celdas y únicamente se mostrará en la que corresponda al valor seleccionado en el combobox.

    Para que funcione correctamente recuerda refrescar el grid cuando cambia el valor del combobox.

    Por cierto, si tienes que presentar esto, ten en cuenta que tanto Crédito como Débito llevan tilde.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 3 de febrero de 2016 4:40