• Domingo 17 de Noviembre de 2024, 14:24

Autor Tema:  Problema Con Datagridview  (Leído 1516 veces)

acano99

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema Con Datagridview
« en: Viernes 9 de Mayo de 2008, 00:02 »
0
Hola soy nuevo en esto de .net... y a lo mejor la pregunta ue formulo no es totalmente correcta....

estoy haciendo una aplicacion que muestra el contenido de una tabla de base de datos en un datagridview.Pues bien. lo que necesito es encontrar un evento que salte, cuando se carga el datagridview, por cada linea, de forma que con los valores de una columna pueda llamar a un procedimiento de base de datos que me devueva un valor, que posteriormente utilizare para modificar el tolltip de otra columna.

He probado conel evento rowsadded pero no termina de funcionar bien ya que solo funciona correctamente para los dos primeros registros.

para probarlo he hecho un sencillo codigo que muestra el valor de una colunma

Private Sub PEDIDOS
_LINDataGridView_RowsAdded(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.DataGridViewRowsAddedEventArg s) Handles PEDIDOS_LINDataGridView.RowsAdded

MessageBox.Show("valor" & PEDIDOS
_LINDataGridView.Item(4, e.RowIndex).Value)

End Sub
en teoria deberia dar un mensaje con cada por cada uno de los registros que se cargan en el datagridview....
pero el caso es que solo salta para los registros 0 y 1 ... aunque en el datagridview se cargan 7 registros....

porfavor necesito ayuda con este tema...

Gracias .....

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Problema Con Datagridview
« Respuesta #1 en: Sábado 10 de Mayo de 2008, 23:24 »
0
Estás equivocado, pero te voy a indicar la razón...de lo que sucede...

Sucede que el datagridview recibe perfectamente la señal del evento rowsAdded.. pero también sucede que se ejecuta de modo asíncrono, esto es si le das al datagridview una instrucción de volcar 1000 registros los vuelca de golpe, al tu forzar al evento rowsadded a mostrar un msgbox el cual es modal el datagridview lo que no va a hacer es pausarse hasta que tu respondas al msgbox... debes entender la diferencia entre un evento y un método. en un método se esperaría hasta que cierres el msgbox, pero un evento es un aviso que te da, la señal continúa ejecutando código de forma asíncrona, no espera, si transcurre un lapso de tiempo...sigue ' a su rollo'...

Qúe puedes hacer para comprobar que funciona perfectamente?... simplemente cambia el códio metido en el evento rowsadded no forzándole con una ventana modal o cualquier otro 'ejercicio' asíncrono... esto es cambia tu código desde:
Código: Text
  1.  
  2. Private Sub PEDIDOS_LINDataGridView_RowsAdded(ByVal sender As System.Object, ByVal e As
  3. System.Windows.Forms.DataGridViewRowsAddedEventArg s) Handles PEDIDOS_LINDataGridView.RowsAdded
  4.  
  5.      MessageBox.Show("valor" & PEDIDOS_LINDataGridView.Item(4, e.RowIndex).Value)
  6.  
  7. End Sub
  8.  
  9.  

...por este otro:

Código: Text
  1.  
  2. Private Sub PEDIDOS_LINDataGridView_RowsAdded(ByVal sender As System.Object, ByVal e As
  3. System.Windows.Forms.DataGridViewRowsAddedEventArg s) Handles PEDIDOS_LINDataGridView.RowsAdded
  4.  
  5.      labelDGV.text= ("valor" & PEDIDOS_LINDataGridView.Item(4, e.RowIndex).Value)
  6.  
  7. End Sub
  8.  
  9.  
labelDGV es una etiqueta label que colocas en una apartada esquina de la vetana donde no moleste... una vez que compruebes que funciona perfectamente, y con las indicaciones anotadas ya sabrás tomar una decisión más oportuna para usar este tipo de eventos que son dados para recibir una informción pero para basar su disparon en un control ferreo... si el datagridview esperamos que cargue 1000 filas en un 1sg.... es incompatible con forzarle a esperar a ejecutar un código que no se sabe a ciencia cierta cuando va a acabar (el msgbox puedes cerrarlo al día sigiente si quieres y sería mala cosa que el programa no pudiera seguir haciendo nada hasta que cerraras la venntana).

pruébalo (cambiando el msgbox por un label)  y nos cuentas...

p.d.: porqué usas un nombre como 'PEDIDOS_LINDataGridView' abrevialo por ejemplo a: 'PEDIDOS_LIN_DGV' yo por lo general abrevio los nombres de los controles a sólo 3 caracteres, además suelo ponerlos al principio así yo lo llamaría DGV_Pedidos_Lin... ya que ayuda fácilmente a saber que control es sólo con mirarlo... es más fácil localizarlo, ya que puedes tener variables por el código que empiecen también por 'PEDIDOS'... si sigues esta simple idea diferenciarás fácilmente variables de datos de nombres de controles... pero vamos es sólo una indicación..
«Ma non troppo»
----> ModoVacaciones = False<----