Visual Basic.NET - Lentitud al pasar datos de datagridview a un formulario

 
Vista:
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés (49 intervenciones) el 10/05/2018 23:03:05
Buenos días a todos! Primero que nada les aclaro que no soy programadora, simplemente estoy creándome una aplicación para mi uso personal así que es probable que cometa errores peor que básicos.
Les comento cuál es mi inconveniente. Tengo en visual.net un datagridview que recibe datos de una tabla de sql server 2017 (mediante un procedimiento almacenado en sql) que me muestra todos mis registros, este datagrid lo uso para buscar el registro que necesito. Empleé un código que cito más abajo para que al hacer doble click en el registro en el datagrid, me abra un form que pasa los datos a cajas de texto.

Frm_cargaHC.TEX_NHC.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(1).Value.ToString

El formulario "externo" viene a ser este "cargaHC" que se abre al final que indico qué dato va en cada caja de texto con un Frm_cargaHC.Show(). Bien, el código anda. Pero el tema es que demora muchísimo en cargar todo y a veces, se "tara" y no carga directamente (hice esto mismo con un formulario con menos campos y anda bien, el problema es en este). Son como 44 campos los que debe pasar del datagrid a sus respectivas cajas de texto antes de poder abrirse el form. A su vez este form tendrá otras consultas a sql que se ejecutan en el load del form para poder cargar datos de otras tablas relacionadas a ese registro que se abre (por ahora sólo programé 1 consulta y ya con esa le cuesta horrores abrir y si la quito, lo mismo, le cuesta).

Les agradecería me sugieran una mejor manera de hacerlo dado que esta, no creo que vaya a funcionar.

Desde ya, millón de gracias y los leo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de giancarlo
Val: 811
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por giancarlo (407 intervenciones) el 11/05/2018 06:23:28
Por lo que veo, tu codigo solo le envía un texto (una llave o codigo principal) al segundo formuario y es aqui donde se demora, lo que se me ocurre es lo siguiente:

1. El query que usas en el SQL no es el optimo y demora demasiado, intenta ejecutarlo pasandole el codigo que te demora y verifica si en el SQL tambien se demora, quizas habría que replantear el query
2. La pc del Sql no tiene los requisitos necesarios para ejecutarlo
3. No estás cerrando la conexión del SQL en el vb.Net
4. la forma en que obtienes los datos desde el .net quizas no está bien hecha, como consejo tengo entendido que los datareader son más rapidos que los dataadapter, aunque esto quizas lo notarías a obtener enormes cantidades de datos, para este caso (44) no debería haber problemas

Avisanos como te va e el punto 1, si tambien es lento pasanos tu query, y el codigo que usas para conectarte y extraer los datos del sql en el .net
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés Burgos (49 intervenciones) el 11/05/2018 15:53:56
Muchas gracias Giancarlo por tomarte el tiempo en responderme! :) La query en sql es la que me trae los datos al datagridview, después no usé ninguna otra, mi error fue no aclarar que con los 44 campos o columnas (que son los que tiene cada registro) que tengo uso esa misma línea de código, o sea me queda un semejante pedazo de código. Yo le pido que cada columna del datagrid me la mande al textbox del formulario que se abre al hacer dobleclick (eso está en el evento dobleclick del datagrid) con esa línea que puse allí, puse una sola para que no quedase largo el post (algunos son combobox, otros son datatimepicker, otro detalle que puede ser que ralentice el asunto?). La query en sql que empleo para traer los datos al datagrid no tiene mucha historia más que un select * from "tabla" y en visual.net hice una función con un try catch que abre y cierra la conexión (o sea usé un procedimiento almacenado).
Lo que pensé mientras antes de dormirme era justamente, tomar la clave principal, mandar esa como parámetro y efectuar otra query donde me traiga ese registro seleccionado al formulario que quiero abrir, sin tomar los datos del datagrid, pero me sigue haciendo ruido que nomás con tan poca información ya esté así lento y como no sé de esto, tenía miedo de haber cometido algún error que luego haga que todo sea un gran desastre! Disculpá si no fui clara con lo que escribí! y mil gracias otra vez por la ayuda!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés Burgos (49 intervenciones) el 11/05/2018 17:32:19
Estuve pensando y creo que el problema está en el momento que paso el valor de la columna del datagrid que contiene el ítem seleccionado del combobox o del datatimepicker, al formulario con dicho combobox o datatime. Hacer lo hace, pero claro creo que no es la manera correcta de hacerlo dado que a veces, no carga, por ende está mal. Los que empleo son combobox no enlazados, no se cargan con tablas en sql. Quizá debería hacer una tabla para los mismos y realizar una consulta en sql para recuperar los datos con el ID del registro, en lugar de recuperarlos del datagrid, verdad? Eso he leído por la web respecto al combobox, al menos. Estoy en lo correcto? Puede venir por aquí el tema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 226
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por gilman (70 intervenciones) el 11/05/2018 11:11:52
Entiendo que dices que sin hacer las consultas a la BD, también tarda, es decir, que el problema está en la ejecución de las sentencias:
1
Frm_cargaHC.TEX_NHC.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(1).Value.ToString
Eso no debería, en principio, demorar mucho la ejecución, lo único que se me ocurre es que el grid tenga muchas filas y lo que le cueste es posicionarse en la fila.
Prueba:
1
2
3
4
5
With Me.Dgv_Buscarpaciente.Rows(Fila)
        Frm_cargaHC.TEX_NHC.Text = .Cells(1).Value.ToString
        'aqui el resto de controles
        '...
End With
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés Burgos (49 intervenciones) el 11/05/2018 16:14:11
Muchas gracias Gilman!! No me expliqué muy bien arriba, por las dudas voy a aclarar mejor. Lo que necesito abrir desde el datagridview es un formulario que tiene un tabcontrol con varias pestañas (5 si no mal recuerdo). El datagrid está en otro formulario (vamos a llamarle central) que al cargar efectúa una query que anda bien (al menos carga rápido, pero tiene un par de registros sólo como para prueba, no más de 4, esto creo que responde una de tus preguntas). Una vez que están allí los datos (que son todos registros de personas) yo quiero que al hacer dobleclick en alguno me abra esa persona, en este otro form del tabcontrol, para visualizarlo y editarlo si es necesario. La información de esos 44 campos o columnas se vuelca en textbox que están en 2 de las pestañas de ese tabcontrol. Las otras pestañas en un futuro quería que alojaren otros datagridview con su correspondiente query a otras tablas de mi base de datos en sql. Intenté cargándole una consulta para llenar una de esas 3 tabpages restantes de este form del tabcontrol (le resta cargar por lo menos 2 más que todavía no creé) y si bien a veces lo carga, otras veces no lo carga. De todas maneras, quité la consulta para ver si metí la pata por allí y no, demora muchísimo en abrir simplemente el hecho de pasar los datos desde el datagrid del form central al formulario del tab en los textbox.
Por si es de relevancia también aclaro que esta tabla de sql "central" que carga este "datagridview central" está relacionada por su llave con las otras tablas, de manera tal que para cada Id de la tabla central (o sea de personas), pueden corresponderle varios registros de estas tablas secundarias (que alojan información extra digamos, que puede o no estar, o sea este Id de la tabla central es llave foránea en las otras).
Como le comentaba a Giancarlo se me ocurrió que al hacer doble click en ese registro del datagrid central, programar una consulta directamente a la base de datos mediante su Id para que me traiga ese registro, en lugar de pasarlo del datagrid del form central al form del tab, quizá sea más rápido. Pero me pregunto si no metí la pata en algún lado porque no me parece tan grande como para que ya falle y vi por la web que todo mundo lo hace con ese sistema de poner columna tal a tal textbox (ya sea de ese formulario o poniendo otro como hice yo y después ponen .Show() para que abra). Y como no sé... es mejor preguntar, me temo haber hecho algo que le esté consumiendo mucha memoria y luego todo sea un gran desastre! Las conexiones doy fe que las cierro, eso lo leí por allí e intento usar el menor código posible, pero claro esto depende de mis conocimientos que son escasos.
Muchas gracias por responderme! valoro muchísimo sus opiniones y aprendo mucho siempre de leerlos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés Burgos (49 intervenciones) el 11/05/2018 17:39:59
Gilman, recién pude probar tu código, que es mucho más económico y lo usaré de hecho para siguientes oportunidades (y esta). Pero el problema sigue y estuve pensando y creo que el problema está en el momento que paso el valor de la columna del datagrid que contiene el ítem seleccionado del combobox o del datatimepicker, al formulario con dicho combobox o datatime. Hacer lo hace, pero claro creo que no es la manera correcta de hacerlo dado que a veces, no carga, por ende tiene que estar mal. Los que empleo son combobox no enlazados, no se cargan con tablas en sql. Quizá debería hacer una tabla para los mismos y realizar una consulta en sql para recuperar los datos con el ID del registro, en lugar de recuperarlos del datagrid, verdad? Eso he leído por la web respecto al combobox, al menos. Estoy en lo correcto? Puede venir por aquí el tema?
Lo que hice en mi desconocimiento fue poner así por ejemplo, para el estado civil:
Frm_cargaHC.CMB_Civil.SelectedItem = .Cells(10).Value.ToString

y para las fechas con datatimepicker (esta sola, combobox hay más)
Frm_cargaHC.DTP_Fechanac.Value = .Cells(6).Value.ToString

y creo que ahí está la "chanchada", verdad? Andar andaba, por eso no me di cuenta que estaba haciendo cosas mal (además de mi desconocimiento, claro está).
Desde ya les agradezco enormemente su ayuda, estoy haciéndome una aplicación para mi uso personal, dado que las que existen en el mercado no solucionan mis necesidades (y enviarla a hacer lamentablemente no es una chance), he estado aprendiendo de este foro y de toda la información que circula por la web. Así que como verán, tengo errores de muy novata, claramente no es mi oficio. Muchas gracias por su tiempo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de giancarlo
Val: 811
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por giancarlo (407 intervenciones) el 11/05/2018 18:24:52
Basandonos en lo comentado por Gilman, usa el codigo
1
Frm_cargaHC.TEX_NHC.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(1).Value.ToString
Con eso le pasarás el dato del principal al formulario secundario, esepecificamente a un textbox. Intenta lo siguiente:
1.en el formulario secundario, agrega un textbox donde pondrás la clave al cual harás el query y llena solo este control, pero no cargues el resto del codigo del formulario secundario(obtener los query). Con esto veremos que tanto demora pasarle el codigo ( no debería haber problemas de hecho)
2.hay una opcion de ejecutar instrucciones paso a paso, debe estar al lado derecho del boton para ejecutar, con esto se ejecutará tu codigo linea a linea, de esta manera verás como y en que orden se ejecuta tu codigo y verás si despues de pasarle el codigo hay un evento que se ejecuta y demora. Para usar esta opcion, correras el programa con F5, antes que le hagas doble clic y abras el formulario secundario, pondrás pausa en el vs.net y clic en esta opcion, luego harás doble clic en el formulario y se ejecutará paso a paso.
3. Brindanos el codigo que usas para llenar tu formulario secundario, en caso siga igual
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés (49 intervenciones) el 11/05/2018 20:50:01
Muchas gracias Giancarlo! La verdad lo que me sucedió fue de lo más insólito (desde mi perspectiva claro). Paso a relatarles. El código que pusiste ahí arriba es con el que yo lo estaba haciendo, Gilman me aconsejó otro que es un poco más abreviado, pero básicamente hace lo mismo.
A partir de que me dijiste que pruebe con 1 solo textbox y columna del datagrid, probé y vi que no abría (uno que era sólo texto). Entonces quité todo y dije a ver si al menos me abre el form! y para mi sorpresa NO LO ABRE! Probé abrir el form desde un botón a ver si abríá, pues sí abre.
Bueno empecé a hacer doble click más rápido, más lento, a ver si era una cuestión del evento... pues para mi sorpresa haciendo eso di con que SOLO abre el formulario si hago dobleclick en una columna (una columna que está por la mitad del datagridview, entonces ahí sí me carga de la fila seleccionada, todos los datos que le pido). Ahí comprendí por qué "a veces me lo abría y otras no"... claro, dependía de si yo justo hacía el doble click en esa columna. Lo que no tengo idea es por qué esa columna o dónde le di la instrucción para que lo haga sólo en esa.
Conclusión: mi código original anda bien... sin nada de lo que pensé del combobox o del datatime. Cambio la pregunta a por qué me toma esa columna en específico?
El código es ese que puse en mi pregunta original:
Private Sub Dgv_Buscarpaciente_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles Dgv_Buscarpaciente.CellContentDoubleClick

Dim Fila As Byte = CByte(Me.Dgv_Buscarpaciente.CurrentCell.RowIndex)
Frm_cargaHC.TEX_NHC.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(1).Value.ToString
Frm_cargaHC.LAB_Fecha1.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(2).Value.ToString
Frm_cargaHC.TEX_Apellido.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(3).Value.ToString
Frm_cargaHC.TEX_DNI.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(4).Value.ToString

(así para todos y termina con)

Frm_cargaHC.Show()
End sub

El selectionmode del datagridview es Fullrowselect. Arranca de 1 porque el datagridview tiene una columna que añadí que es un checkbox para poder eliminar los registros. Y la columna que por alguna razón toma como la celda para ejecutar el evento del dobleclick es la de Edad que vendría a ser la columna 7 y no tengo la más remota idea de por qué!

Millón de gracias Giancarlo! Tus consejos de probar quitando las columnas me llevaron a ver dónde está el "error" que en sí es menor pero... no sé dónde le "dije" que ejecute el evento sólo en esa columna alguna idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de giancarlo
Val: 811
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por giancarlo (407 intervenciones) el 11/05/2018 21:36:03
Recuerda que es importante poner tu código, ya que así podemos resolverlo de una mejor manera, Donde dice
1
Private Sub Dgv_Buscarpaciente_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles Dgv_Buscarpaciente.CellContentDoubleClick
Usas el habdles..... cellCONTENTdouble click, esto quiere decir que, cuando se ejecuta al hacer doble clic sobre el contenido (o texto) debtro de una celda, supongamos, que el texto de tu celda solo ocupa la mitad, si le haces doble clic en la parte del texto se activará el sub, pero si le haces en la parte vacia, entonces no se activará, por eso que a veces sale y a veces no.¿ Solucion? Quitale la palabra content para que se ejecute al hacer doble clic.
Private Sub
1
Dgv_Buscarpaciente_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles Dgv_Buscarpaciente.CellDoubleClick

donde dice dim fila as byte.... CBYTE(, la verdad que no entiendo para que lo pusiste, solo serviría si le quisieras pasar alguna imagen o algo por el estilo (segun mi experiencia), aunque debería ir value en lugar de text.....
En fin, lo que hace el cbyre es convertir la cadena de texto (en este caso) a una cadena bytes, 1 y 0. Debió haber sido es dim codigo as integer (o string si es una cadena alfanumérica) pero con esto bastaría
1
Frm_cargaHC.TEX_NHC.Text = Me.Dgv_Buscarpaciente.Rows(Fila).Cells(1).Value.ToString
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés (49 intervenciones) el 11/05/2018 21:46:26
Millón de gracias!!!! Sí, no quise cansar pegando todo el código porque era largo y pensé que en ese pedazo no estaba el problema, ni se me ocurrió pensarlo directamente (cuando uno no sabe a veces pifiás en lo más tonto), entonces puse la parte que me parecía que iba "directo al grano" y era mucho más básico la cuestión. Cambiaré todo tal cual me dijiste, no tenés idea lo muy útil que me fue! Eternamente agradecida!!!
PD: por qué usé Cbyte? Pues porque leí por algún lado que se hacía así y bueno, no me cuestioné ese pedazo de código, pero tenés toda la razón
De nuevo gracias, gracias, gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de giancarlo
Val: 811
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por giancarlo (407 intervenciones) el 11/05/2018 21:53:26
Sobre el cybte, quizas, era correcto, solo que el contextoquizas no, a menos que haya usado más codigo, pero como te decía es más simple, si tienes el link pasalo por aqui para revisarlo y aprender. Nos avisas como te va con los cambios
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés (49 intervenciones) el 11/05/2018 22:09:39
Sí, yo como vi en varios lados así la verdad, no me lo plantee. El post exactamente donde lo leí, no sabría decirte porque fueron varios pero mira aquí te dejo dos donde no explica tan claramente como vos por qué no es necesario:

https://www.lawebdelprogramador.com/foros/Visual-Basic.NET/725087-URGENTE-COMO-ENLAZAR-UN-DATAGRID-CON-UN-TEXTBOX.html

y otro:

http://www.canalvisualbasic.net/foro/visual-basic-net/mostrar-datos-de-datagridview-en-form-ya-abierto-15275/

Probé con tus sugerencias y por supuesto que anduvo (la macana de confundir el evento fue mía creo, no sabía que había esa sutil pero gran diferencia en resultado entre los dos eventos).

Muy agradecida ya que llega un punto que cuando no sabés dónde te equivocaste, empezás a ponerte un poco loca

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de giancarlo
Val: 811
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por giancarlo (407 intervenciones) el 12/05/2018 19:44:30
revisé tus link y pues como lo pusiste no hay diferencia, así que segun el ejemplo DEBERÍA funcionar, revisando nuevamente el código encontré algo un poco peculiar e innecesario

Cuando pones:
1
Dim fila as Byte = CByte(Me.DataGridView.CurrentCell.RowIndex)
lo que hace es detectar el indice de la fila seleccionada devolviendo un numeor entero, lo peculiar es que este numero (tipo entero) lo convierte a un tipo de dato byte¿?

Despues, al asignarlo al tetxbox, especificamente donde dice fila, le estás poniendo el indice de la fila seleccionado (el cual fué transformado a BYTE¿?)
1
My.form.form2.TextBox1.Text = Me.DataGrieView.Rows(Fila).Cell(0).Value.ToString

Para hacer algo más económico y eficiente podrías extraer la fila entera:
1
2
dim fila as datagridviewrow=datagridview1.currentrow
dim celda as texto=fila.cells("nombre o indice de columna").value
pero eso sería mejor cuando vas a pasar varios datos de la misma fila, pero si es para uno A MI PARECER sería innecesario ya que escribirías más lineas, aunque más lineas... es gratis no? jajaja

La gran pregunta es: ¿Para que convertir un valor y pasarlo al textbox cuando puedes pasarle el valor original?
Un ejemplo aplicable sería para grabar cotraseñas en la BD, aunque mejor sería encriptado por ser más estable y una longitud fija. Esto para que cuando alguien vea en la BD no pueda saber la cotraseña ya que está encriptado

Con respecto a lo máximo de filas, que yo sepa, el limite es la memoria de la PC, personalmente he cargado algo de 500 000 registros (según el administrador de taras el proceso pesaba 1.5 GB de ram), he escuchado que llegaron a unos cuantos millones. Con tantos registros podrías sobrecargar el sistema, con riesgo de overload, lentitud del sistema operativo, aumentos en los requerimientos minimos del hardware
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés (49 intervenciones) el 12/05/2018 20:30:07
Muchas gracias por la explicación completa Giancarlo! He aprendido mucho de ambos. Al principio lo hice así por desconocimiento, pero al leerte lo cambié como me sugerís (en el otro mensaje, cuando los leí y comprendí sus sugerencias mejoré el código). Inicialmente recuperaba del datagridview todos los campos, pero después me di cuenta que era una tontera lo que estaba haciendo porque traía de sql todas las columnas de todos los registros, cuando sólo me interesaba en ese datagrid ver el nombre y datos de contacto de la persona. Así que cambié el stored procedure a que me seleccione sólo unas columnas (había puesto invisibles las columnas que no me interesaban, osea traía un montón para sólo visualizar un par en el datagrid, no tenía sentido). Así que ahora voy a poner que si hago doble click en esa persona, me cargue sólo el id de la persona en el otro formulario y que a partir de allí, con otra consulta que me seleccione ahí sí de esa persona todos los campos acorde a ese id, rellenar el formulario donde necesito ver todos esos datos, en lugar de pasar uno a uno del datagrid. Creo que será mejor para el rendimiento de la aplicación, verdad?
No creo que la cantidad de registros vayan a llegar nunca a 500.000 pero sí iban a pasar los 256, por eso me preocupé un poco!
La verdad que a veces no pregunto por estos foros para no molestar, así que me pongo a leer hasta que agoto mis recursos, pero la verdad, que he aprendido toneladas gracias a sus respuestas! muchísimas gracias a los dos, por el conocimiento y sobre todo por la paciencia!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 226
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por gilman (70 intervenciones) el 12/05/2018 10:16:19
El código que puse no solo es mas 'económico' si no que es más eficiente ya que cada vez que usas
Me.Dgv_Buscarpaciente.Rows(Fila)
El programa debe 'buscar' la fila, desconozco como están organizadas en memoria las filas del datagridview, pero si hubiese muchas filas podría darse el caso de que, con el código original, se ralentizase, mientras que con el código que yo puse solo se busca una vez.

De todas formas ese no era tu caso ya que el grid solo puede contener 256 filas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés (49 intervenciones) el 12/05/2018 16:42:43
Muchas gracias Gilman!! Tu comentario me ha sido muy útil, lo puse como me aconsejaste . Una pregunta ya que mencionás esto de las 256 filas, si uno tuviese no sé, una tabla con 1.000 registros y necesitás listarlos para luego consultarlos, con qué objeto se puede hacer? Porque según dices, el máximo sería 256?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 226
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por gilman (70 intervenciones) el 13/05/2018 08:39:21
Porque guardabas el número de fila en una variable de tipo Byte, y solo puede contener números enteros menores de 256
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Lentitud al pasar datos de datagridview a un formulario

Publicado por María Inés (49 intervenciones) el 13/05/2018 17:45:07
ahh carambas!!! Menos mal entonces que pregunté por otra cosa sino menudo problema iba a tener!!! Muchísimas gracias, nuevamente a los dos. Muy agradecida por su ayuda! He aprendido mucho!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar