Obtener 200.000 o 1 Millon de Registros y Cargarlos en un DataGridView

07/05/2006 - 16:41 por Daniel López | Informe spam
Estoy intentado realizar un Select contra una tabla SQL que me devuelve
entre 200.000 y 1 Millón de registros, y dichos registros deben ser
mostrados en un DataGridView o similar.

Para realizar esto he probado ha utilizar el objeto SQLDataReader, la
ejecución asincronica del comando y el uso de hilos de trabajo
independientes, sin embargo al utilizar estos medios, con el hilo
independiente, aun que no congela la aplicación y funciona, el
DataGridView no se va actualizando a medida que se le cargan los nuevos
datos (Como sucede en un gran Select dentro del SQL Managment Studio).
Los datos son cargados a un DataSet que ya esta vinculando con el
DataGridView.

¿ Hay alguna posibilidad de realizar esto, que se muestre gradualmente
los resultados, no utilizando paginación en el sentido de usar botones
para continuar si no que cargue poco a poco los resultados y que
mientras lo hace el usuario pueda ir visualizando lo ya cargado ?

Gracias de antemano.

P.D.: Todo esto lo estoy realizando con VC# 2005 Express y SQL Server
2005 Express/SQL 2000 Standard.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
07/05/2006 - 17:16 | Informe spam
"Daniel López" wrote in message
news:%
¿ Hay alguna posibilidad de realizar esto, que se muestre gradualmente los
resultados, no utilizando paginación en el sentido de usar botones para
continuar si no que cargue poco a poco los resultados y que mientras lo
hace el usuario pueda ir visualizando lo ya cargado ?



Igual voy a decir una tontería, pero ¿has probado a poner un
Application.DoEvents() en medio del bucle que va leyendo los registros del
datareader y pasándolos al grid? De hecho, con este sistema, ni siquiera
sería necesario utilizar threads.
Respuesta Responder a este mensaje
#2 José Antonio
07/05/2006 - 22:40 | Informe spam
Dudo mucho que alguien se aclare con un data grid donde tiene que revisar un
millon de filas.


"Alberto Poblacion"
escribió en el mensaje news:%
"Daniel López" wrote in message
news:%
¿ Hay alguna posibilidad de realizar esto, que se muestre gradualmente
los resultados, no utilizando paginación en el sentido de usar botones
para continuar si no que cargue poco a poco los resultados y que mientras
lo hace el usuario pueda ir visualizando lo ya cargado ?



Igual voy a decir una tontería, pero ¿has probado a poner un
Application.DoEvents() en medio del bucle que va leyendo los registros del
datareader y pasándolos al grid? De hecho, con este sistema, ni siquiera
sería necesario utilizar threads.



Respuesta Responder a este mensaje
#3 Daniel López
08/05/2006 - 20:56 | Informe spam
Alberto Poblacion escribió:
"Daniel López" wrote in message
news:%
¿ Hay alguna posibilidad de realizar esto, que se muestre gradualmente los
resultados, no utilizando paginación en el sentido de usar botones para
continuar si no que cargue poco a poco los resultados y que mientras lo
hace el usuario pueda ir visualizando lo ya cargado ?



Igual voy a decir una tontería, pero ¿has probado a poner un
Application.DoEvents() en medio del bucle que va leyendo los registros del
datareader y pasándolos al grid? De hecho, con este sistema, ni siquiera
sería necesario utilizar threads.






Nada, va mostrando los registros, pero la ScrollBar lateral no la
muestra y no es que refresque automaticamente el DataGridView si no que
a medida que te vas moviendo por el DataGridView va mostrando la nueva
información pero sigues estando a ciegas.
Respuesta Responder a este mensaje
#4 Daniel López
08/05/2006 - 21:02 | Informe spam
José Antonio escribió:
Dudo mucho que alguien se aclare con un data grid donde tiene que revisar un
millon de filas.


"Alberto Poblacion"
escribió en el mensaje news:%
"Daniel López" wrote in message
news:%
¿ Hay alguna posibilidad de realizar esto, que se muestre gradualmente
los resultados, no utilizando paginación en el sentido de usar botones
para continuar si no que cargue poco a poco los resultados y que mientras
lo hace el usuario pueda ir visualizando lo ya cargado ?


Igual voy a decir una tontería, pero ¿has probado a poner un
Application.DoEvents() en medio del bucle que va leyendo los registros del
datareader y pasándolos al grid? De hecho, con este sistema, ni siquiera
sería necesario utilizar threads.









Quizas se aclare o quizas no, pero dado el volumen de datos es muy
posible que sea necesario mostrar esa cantidad de registros y por eso es
mi pregunta, entiendo que los datos para ser recogidos del servidor
necesitan un hilo independiente dado que tardan mucho en recibirse y que
tambien necesitan un hilo independiente para cargarse dado que pueden
ser muchos los datos a recibir, no obstante los registros deben poder
verse y como exponia en mi primer mensaje es algo posible ya que en el
"SQL Managment Studio" esta hecho, y este al fin y al cabo esta hecho
con framework.

Al final si no me queda más remedio tendré que hacerlo utilizando
paginación en la parte del cliente y un DataView, pero me gustaría saber
como cargarlo de esta manera puesto que en el caso de tener que cargar
mas de 1000 o 2000 registros de un tirón no bloquea la interfaz y se
pueden ir viendo el resultado a medida que se cargan los datos.

En cualquier caso estoy abierto a sugerencias.


Saludos
Respuesta Responder a este mensaje
#5 Marckys
15/05/2006 - 18:44 | Informe spam
Buenas,
Yo utilizaría la sobrecarga del Fill:

adp.Fill(dts, startRecord, maxRecord, strTableName);

Con esto solo cargas desde un registro inicial hasta un max de registro, te
puede servir para paginar o cargar los registros según te interese en la
página.

Espero que te sirva.
MCP - MCAD.NET
DCE 5


"Daniel López" wrote:

Alberto Poblacion escribió:
> "Daniel López" wrote in message
> news:%
>> ¿ Hay alguna posibilidad de realizar esto, que se muestre gradualmente los
>> resultados, no utilizando paginación en el sentido de usar botones para
>> continuar si no que cargue poco a poco los resultados y que mientras lo
>> hace el usuario pueda ir visualizando lo ya cargado ?
>
> Igual voy a decir una tontería, pero ¿has probado a poner un
> Application.DoEvents() en medio del bucle que va leyendo los registros del
> datareader y pasándolos al grid? De hecho, con este sistema, ni siquiera
> sería necesario utilizar threads.
>
>
>

Nada, va mostrando los registros, pero la ScrollBar lateral no la
muestra y no es que refresque automaticamente el DataGridView si no que
a medida que te vas moviendo por el DataGridView va mostrando la nueva
información pero sigues estando a ciegas.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida