none
Tiempo de carga excesiva de un datagrid RRS feed

  • Pregunta

  • Buenas a todos,

    Tengo un datagrid que requiere mucho tiempo para poder cargarlo en pantalla ya que recoge muchos datos de la BD. Me gustaría poder cargarlo una vez y que a partir de esa primera vez las siguientes fuesen mucho más rápidas. 

    ¿Cómo podría realizar esto?

    Gracias de antemano,

    miércoles, 24 de abril de 2013 8:56

Todas las respuestas

  • hola

    de que cantidad de registros estamos hablando ? porque si vas a mostrar en pantalla 500 o mas registros es una locura,el grid no esta preparado para ese volumne de datos

    deberias aportar mejores filtros y paginar la informacion para reducir el numero he ir trabjando de a poco con la info

    esto ademas hace que aportes valor a la aplicacion ya que es impisble que un usuario trabaje con un volumne importante de datos a la vez pero si le brindas tools para poder buscar puntual lo que requiere eso suma en la aplicacion

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 24 de abril de 2013 12:55
  • es mejor que coloques un filtro, porque cargar de 500 registros para arriba ya ni me lo quiero imaginar, a mi me pasó algo similar con un datagrid, el programa se quedo pensando y habian mas de 5mil registros :S por lo que es mejor optar por un filtro y es mucho mas facil de manejar los datos
    miércoles, 24 de abril de 2013 13:03
  • Muy buenas gracias a los dos;

    El problema no es el número de registros, el problema es las comprobaciones que se hacen antes de que aparezcan los registros. Es decir, para cada elemento (i,j) se realiza una comprobación en la base de datos. Esto hace que al grid le cueste mucho cargarse. Se os ocurre alguna posibilidad más que no sea el tema de los filtros? ya que aquí esa solución no me vale.

    Gracias.

    lunes, 29 de abril de 2013 11:01
  • Porque no haces un procedimiento almacenado que te realice también las comprobaciones de los datos??

    Así cuando acabe el procedimiento devuelves los registros ya validados...y también estoy de acuerdo con los filtros.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 29 de abril de 2013 11:18
  • Gracias Sergio,

    Puede ser una solución pero no se si me valdría. Te comento lo que he hecho, he creado una vista ya que la consulta es algo compleja (vista1). Luego creo las filas y columnas. Y por último por cada uno de los elementos (fila, columna) verifico si es TRUE o FALSE. Y según eso relleno el checkbox de cada elemento (fila, columna). Esto último lo he reflejado aquí abajo. Creo que esta es la parte que más le cuesta cargar. Ya que va mirando elemento a elemento. ¿Se os ocurre algo más?

     For i As Integer = 2 To dt.Columns.Count - 1
           For j As Integer = 0 To dt.Rows.Count - 1
                        columnaAux = dt.Columns(i).ColumnName
                        filaAux = dt.Rows(j).Item(0)
                        comando.CommandText() = "SELECT * FROM [dbo].[vista1] WHERE nombre = '" & filaAux & "' AND descripcion = '" & columnaAux & "'"
                        lector = comando.ExecuteReader
                        If lector.Read Then
                            dt.Rows(j).Item(i) = True
                        Else
                            dt.Rows(j).Item(i) = False
                        End If
                        lector.Close()
    
          Next
    Next
    Muchas gracias,
     
    lunes, 29 de abril de 2013 14:05
  • No entiendo la validación, lo puedes explicar??


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    lunes, 29 de abril de 2013 14:23
  • Vista1 es una vista que realiza un inner join de varias tablas y hace una tabla virtual de dos columnas en la que si aparece un registro con la primera columna igual a "nombre" y la segunda igual a "descripcion" entonces el checkbox del elemento (i,j) se activa. En otras palabras, lo que hago es una matriz con usuarios y puertas. Si cada usuario tiene acceso a cada puerta lo checkeo y si no no. Esto me lleva tiempo de carga. ¿Como puedo disminuir este tiempo? 
    martes, 30 de abril de 2013 16:23