none
Pintar un DatagridView hasta que todo ha sido procesado RRS feed

  • Pregunta

  • Estoy llenando un datagridview de windows.Forms con el datasource con una lista

    lo que sucede es que yo hago ciertas operaciones en el grid al cargarse 

    como cambiar el color de un texto, hacer una celda multilinea etc.

    me doy cuenta cuanto estoy debugeando que si se agrega un objeto a la lista lo pinta en el grid.

    va a pintando en el grid registro por registro, como se va llenado la lista.

    esto creo que me lo hace mas lento al llamar a un render por cada registro.

    como puedo decirle al grid pintalo hasta que estes totalmente lleno 

    una sola pintada, no 200 que por ejemplo.

    Les muestro algo del codigo.

    private void CargarDtgvChecadas(List<Checada> checadas)
            {
                this.DtgvChecadas.DataSource = null;
                this.DtgvChecadas.DataSource = checadas;
                this.DtgvChecadas.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
                this.DtgvChecadas.Columns["SapId"].HeaderText = "SapId";
                this.DtgvChecadas.Columns["SapId"].Width = 70;
                this.DtgvChecadas.Columns["SapId"].Resizable = DataGridViewTriState.False;
                this.DtgvChecadas.Columns["SapId"].ReadOnly = true;
                this.DtgvChecadas.Columns["Fecha"].HeaderText = "Fecha";
                this.DtgvChecadas.Columns["Fecha"].Width = 80;
                this.DtgvChecadas.Columns["Fecha"].Resizable = DataGridViewTriState.False;
                this.DtgvChecadas.Columns["Fecha"].ReadOnly = true;
                this.DtgvChecadas.Columns["Hora"].HeaderText = "Hora";
                this.DtgvChecadas.Columns["Hora"].Width = 60;
                this.DtgvChecadas.Columns["Hora"].Resizable = DataGridViewTriState.False;
                this.DtgvChecadas.Columns["Hora"].ReadOnly = true;
                this.DtgvChecadas.Columns["FechaHora"].Visible = false;
                this.DtgvChecadas.Columns["Validaciones"].ReadOnly = true;
                this.DtgvChecadas.Columns["Validaciones"].HeaderText = "Validaciones";
                this.DtgvChecadas.Columns["Validaciones"].Resizable = DataGridViewTriState.False;
                this.DtgvChecadas.Columns["Validaciones"].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
                this.DtgvChecadas.Columns["Validaciones"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
    
                foreach (DataGridViewRow row in DtgvChecadas.Rows)
                {
                    if (row.Cells["Validaciones"].Value.ToString() == "Correcto")
                    {
                        row.Cells["Validaciones"].Style.ForeColor = Color.Green;
                    }
                    else
                    {
                        row.Cells["Validaciones"].Style.ForeColor = Color.Red;
                    }
                }
    1.- Como puedo pintar el grid hasta que este llena toda la lista y procesado todo. para que pinte solo una ves

    jueves, 4 de octubre de 2018 15:04

Respuestas

  • Buenas,

    Creo recordar (y lo digo de memoria e igual me equivoco) que el evento datasourcevhanged se lanza una vez que se ha acabado de cargar el nuevo datasource. Podrías usar ese evento para iterar las filas de tu datagridview y formatearlo al gusto.

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub
    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    jueves, 4 de octubre de 2018 18:00