none
Paginar datagridview de vb.net a través del scrollVertical

    Pregunta

  • Hola a todos, buenos días.

    Precisaría saber como se puede paginar un datagridview a través de la barra del scroll, no puede ser con botones ya que es una tabla con 900 registros que al ser la de entrada de datos (son cuentas y valores), no puedo estar dándole al botón para pasar páginas del datagridview. El mismo lo cargo con el DataSource directo a la tabla. Tarda en cargar unos 5 segundos, lo cual es suficiente para que al usuario se le quede congelado el form de carga durante ese tiempo.

    Por otro lado al ser de entrada de datos la grilla, necesitaría que el usuario no note o lo note mínimamente el cambio de página del datagridview.

    Bueno, eso no se si tiene una solución correcta ya que se me hace muy complicado poder hacerlo de la manera indicada.

    Un cordial saludo

    Gemma


    martes, 4 de octubre de 2016 6:39

Respuestas

  • "gemma_campillo" preguntó:

    > Precisaría saber como se puede paginar un datagridview a través de la barra del scroll,
    > no puede ser con botones ya que es una tabla con 900 registros que al ser la de entrada
    > de datos (son cuentas y valores), no puedo estar dándole al botón para pasar páginas
    > del datagridview.

    Hola, Gemma:

    La verdad es que ignoro cómo vas a poder "paginar un control DataGridView a través de su barra de scroll", porque el concepto de paginar es para obtener 10, 20, 30 o el número de registros que deseamos que tenga una página concreta. Por ejemplo, si tienes 900 registros, podemos establecer que cada página tenga 50 registros, con lo que tendríamos 18 páginas en total: 18 páginas x 50 registros = 900 registros. Y para obtener los 50 registros de cada página, tendrías que rellenar el típico objeto DataTable para asignárselo a la propiedad DataSource del control DataGridView:

       
    DataGridView1.DataSource = ObtenerRegistrosPágina(6) ' 6 es el número de página

    ¿Qué sucede cuando le asignas un valor a la propiedad DataSource del control DataGridView? Que los registros anteriores desaparecen y se rellena con los nuevos existentes en el control DataTable asignado, por lo que por defecto se seleccionará la primera columna de la primera fila o registro, o la fila completa, situándose por tanto la barra de scroll nuevamente arriba del todo, por tanto, ¿cómo pretendes paginar mediante la barra de scroll vertical del control DataGridView? Yo, desde luego, no veo manera de hacerlo. ¿?

    Entiendo que la barra de scroll del control DataGridView es para moverse de una manera lenta o rápida para que se hagan VISIBLES aquellos registros que por la altura que tiene asignada el control pueden que estén OCULTOS en un momento determinado. Es decir, primeramente se mostrarán 50 registros, por ejemplo, y conforme incrementas el scroll van apareciendo nuevos registros abajo conforme se ocultan los de arriba, y al contrario si lo que estás haciendo es decrementar el scroll: se ocultarán los de abajo y se mostrarán los de arriba. No sé si me explico correctamente.

    Si tu deseas paginar registros, tienes que mostrar solamente aquellos que se correspondan con una página (los 50 del ejemplo anterior o el número de ellos que se correspondan con la altura que tenga establecida el control DataGridView), e indicar que no se muestre la barra de scroll del control DataGridView (propiedad ScrollBars = None), y habilitar los típicos botones Primero, Anterior, Siguiente, Último, para que el usuario puede navegar por todos los registros de la tabla, de tal manera que cada vez que el usuario pulse un botón mostrarle los registros que correspondan previa consulta a la base de datos.

    Lo mismo hay algo por ahí que te permita hacer lo que deseas, pero yo por ahora "no doy con la tecla". ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    viernes, 7 de octubre de 2016 11:49
    Moderador

Todas las respuestas

  • "gemma_campillo" preguntó:

    > Precisaría saber como se puede paginar un datagridview a través de la barra del scroll,
    > no puede ser con botones ya que es una tabla con 900 registros que al ser la de entrada
    > de datos (son cuentas y valores), no puedo estar dándole al botón para pasar páginas
    > del datagridview.

    Hola, Gemma:

    La verdad es que ignoro cómo vas a poder "paginar un control DataGridView a través de su barra de scroll", porque el concepto de paginar es para obtener 10, 20, 30 o el número de registros que deseamos que tenga una página concreta. Por ejemplo, si tienes 900 registros, podemos establecer que cada página tenga 50 registros, con lo que tendríamos 18 páginas en total: 18 páginas x 50 registros = 900 registros. Y para obtener los 50 registros de cada página, tendrías que rellenar el típico objeto DataTable para asignárselo a la propiedad DataSource del control DataGridView:

       
    DataGridView1.DataSource = ObtenerRegistrosPágina(6) ' 6 es el número de página

    ¿Qué sucede cuando le asignas un valor a la propiedad DataSource del control DataGridView? Que los registros anteriores desaparecen y se rellena con los nuevos existentes en el control DataTable asignado, por lo que por defecto se seleccionará la primera columna de la primera fila o registro, o la fila completa, situándose por tanto la barra de scroll nuevamente arriba del todo, por tanto, ¿cómo pretendes paginar mediante la barra de scroll vertical del control DataGridView? Yo, desde luego, no veo manera de hacerlo. ¿?

    Entiendo que la barra de scroll del control DataGridView es para moverse de una manera lenta o rápida para que se hagan VISIBLES aquellos registros que por la altura que tiene asignada el control pueden que estén OCULTOS en un momento determinado. Es decir, primeramente se mostrarán 50 registros, por ejemplo, y conforme incrementas el scroll van apareciendo nuevos registros abajo conforme se ocultan los de arriba, y al contrario si lo que estás haciendo es decrementar el scroll: se ocultarán los de abajo y se mostrarán los de arriba. No sé si me explico correctamente.

    Si tu deseas paginar registros, tienes que mostrar solamente aquellos que se correspondan con una página (los 50 del ejemplo anterior o el número de ellos que se correspondan con la altura que tenga establecida el control DataGridView), e indicar que no se muestre la barra de scroll del control DataGridView (propiedad ScrollBars = None), y habilitar los típicos botones Primero, Anterior, Siguiente, Último, para que el usuario puede navegar por todos los registros de la tabla, de tal manera que cada vez que el usuario pulse un botón mostrarle los registros que correspondan previa consulta a la base de datos.

    Lo mismo hay algo por ahí que te permita hacer lo que deseas, pero yo por ahora "no doy con la tecla". ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    viernes, 7 de octubre de 2016 11:49
    Moderador
  • Hola querido maestro:

    Ya me imaginaba eso que me has comentado no con tanta precisión en la explicación, eso era para que cuando carga 2 forms, sobre todo el de introducción de datos en el que el usuario puede saltar de la línea 60 a la 180 por ejemplo, lo hiciera como hasta ahora, se mete en el scroll y sin problemas va hacia arriba o hacia abajo. Ahí el problema estaba únicamente en la carga que tarda unos 3 segundos con Access y no se percibe el tiempo si carga con SqlCompact o SqlServer Express. Y claro me dije, si en vez de cargas los 800 registros mas o menos de una tacada, cargo 50 por ejemplo el tiempo de que aparezca el form será mucho menor.

    Tampoco pasa nada con ese tiempo, pero era una cosa a mejorar.

    Maestro, gracias por tu didáctica y amplia explicación, (escribe un libro, ya que no te van a faltar compradores), que como siempre se entienden a la perfección.

    Bueno, ya estoy acabando la maldita conversión de tipos double a decimal y aver si este fin de semana lo tengo listo. Te diré algo.

    Bueno, un fuerte abrazo como siempre mi querido Enrique.

    Gemma

    viernes, 7 de octubre de 2016 14:39