none
Efectos raros lado inferior DataGridView RRS feed

  • Pregunta

  • Hola:

    En varios Form tengo DataGridView que ocupan casi todo el ancho de la ventana, está conectado con un datasource a un dataset y hasta ahí todo bien.
    Cuando los registros superan el alto del datagrid y aparece la barra de desplazamiento vertical, queda en el lado inferior un pequeño hueco vacío porque no cabe un registro entero. Al mostrar los registros selecciono que se muestre el último. La barra horizontal está deshabilitada porque tengo un filll a todo lo ancho.

    El problema surge cuando desplazo verticalmente los registros y cuando bajo la barra para mostrar el último y en ese hueco vacío inferior a veces aparece un registro fantasma que es copìa del penúltimo o antepenúltimo registro del grid. Si trato de seleccionarlo no lo hace y se arregla cuando llamo al procedimiento que rellena de nuevo el grid.
    También sucede que en ese mismo espacio vacío cuando se superpone un cuadro de diálogo se desdibuja ese espacio inferior y en su lugar aparecen restos del cuadro de diálogo o de la ventana que hay debajo.
    También tengo que aclarar que estos efectos no se producen cuando el hueco bajo los registros es grande y no hay scrolling vertical.

    Pienso que se trata de un fallo al repintar el hueco que queda debajo del último registro. He probado a hacer refresh del control y de la ventana completa pero no da resultado o no lo estoy haciendo bien. En cuanto al registro fantasma cuando hago scroll vertical, no encuentro solución, solo ya digo llamar de nuevo al procedimiento.

    Agradeceré a quien pueda orientar acerca de este problema que no sé si se puede tratar de una falla de DataGridView.

    Saludos al grupo.


    • Editado J. Enrique Alcaraz lunes, 26 de septiembre de 2011 9:37
    • Cambiado Enrique M. Montejo miércoles, 28 de septiembre de 2011 15:31 Controles de Windows Forms (De:Lenguaje VB.NET)
    lunes, 26 de septiembre de 2011 9:19

Todas las respuestas

  • Hola,

    Nos puedes pasar una imagen de la ventana con estos problemas y el evento donde estás cargando los datos.

     

    Saludos,


    phurtado
    lunes, 26 de septiembre de 2011 9:47
  • Hola:

    Ya digo que al cargar los datos no se producen los efectos (excepto que a veces el hueco por debajo del último registro se muestra otro color que no es el fondo del DataGrid), es después de hacer un scroll vertical o superponer otra ventana o las dos cosas.

    Se me olvidaba, utilizo vb 2010 express.

    Por si acaso el código es:

                    dbConector.Open()
                    dbAdaptador = New OleDbDataAdapter(strSQL, dbConector)
                    dbConjuntoDatos = New DataSet
                    dbAdaptador.Fill(dbConjuntoDatos)
                    dbConector.Close()
                    .DataSource = dbConjuntoDatos.Tables(0)
                    dbAdaptador.Dispose()
                    dbConjuntoDatos.Dispose()
                    dbConector.Close()
                    For i = 0 To .Columns.Count - 1
                        .Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                        If .Columns(i).Name <> "Fecha" And .Columns(i).Name <> "Número" Then
                            .Columns(i).DefaultCellStyle.Format = "N2"
                        End If
                    Next
    'Mostrar el último registro:
                    If .Rows.Count > 0 Then
                        .FirstDisplayedScrollingRowIndex = .RowCount - 1
                        .CurrentCell = .Rows(.RowCount - 1).Cells(0)
                        .FirstDisplayedCell = .CurrentCell
                    End If
                End With

    Y ahí va una imagen, como se ve , es el registro 16333 el que ha dejado una imagen fantasma tras superponer otra ventana cualquiera, y además, ahora como desplazado a la derecha.

    Saludos.


    lunes, 26 de septiembre de 2011 11:09
  • efecto bastante extraño, por lo que comentas pareciera un tema de repitando

    Sending a final .Refresh() after scrolling a DataGridView

    aunque parece ser que no eres el unico

    alli se plante hacer un refresh al llegar al final del scroll

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 26 de septiembre de 2011 12:04
  • Hola:

    Todo hace pensar en algún problema de repintado de la zona del registro que no se llega a mostrar porque no cabe en la altura del control y se muestra la altura de un registro más arriba. también coincide con el espacio reservado al scroll horizontal aunque está deshabilitado.

    He intentado copiar el código al que haces referencia pero a mí no me da resultado. El datagridview lo he puesto en el form desde la barra de herramientas y la propiedad scrollbars vertical.
    Esta aplicación es una migración a vb.net 2010 desde vb6 empresarial que lleva más de 10 años corriendo perfectamente y no esperaba encontrarme con estos pequeños problemas, aunque la migración ya está casi terminada.

    Seguiré investigando sobre este problema y mientras tanto agradeceré cualquier otra aportación.

    Saludos al grupo.

    lunes, 26 de septiembre de 2011 16:43