• Viernes 8 de Noviembre de 2024, 00:33

Autor Tema:  Duda en evento de un DataGridView  (Leído 3040 veces)

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Duda en evento de un DataGridView
« en: Martes 14 de Octubre de 2008, 17:25 »
0
Hola a todos  :lol:

:mellow: Bien, tengo una duda sobre Visual Basic 2005.

Necesito incluir un msgbox en el evento del data grid viw cuendo este agrega automaticamente la ultima fila de una tabla. es decir:
 


Cuando edito ultima fila, DataGridView agrega ultima fila (automaticamente) y cuando esto suceda aparezca un msgbox. Cual es el evento (del DataGridView) donde debo agregar esta linea de codigo del msgbox?

Saludos.


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Duda en evento de un DataGridView
« Respuesta #1 en: Miércoles 15 de Octubre de 2008, 11:13 »
0
Léelo todo o no te enterarás de la solución... y los psoibles problemas que pueden aparecer...
No es recomendable que añadas código en dicho evento, ten en cuenta que ciertos eventos son asíncronos para ganar en velocidad y no tener 'colgada' la aplicación mientras se rellenan los datos (imagina una base de datos con millones de registros y una consulta de búsqueda compleja, si tarda pongamos un minuto en procesarla no podrías hacer nada más hasta terminar).

Que sea asíncrono implica que no se va a a parar en cada evento a esperar que tu cóodigo sea totalmente resuelto... El resultado final sería pongamos que se vuelcan 1000 filas, se vuelca la fila 1ª notifica al evento de ello, tu código llama a ejecutarse, mientras sale, es leído y el usuario pulsa para cerrar ya se han volcado (pongamos para el ejemplo) 500 filas más.. como es asíncrono, si no recibió de vuelta la señal de un evento y se produce el siguiente caso de lanzar el evento, lo ignora y continúa.

Simplificando, ciertos eventos no son hechos para lo que te dé la gana sino sólo para un procesado simple, por ejemplo si la fila añadida tiene el valor tal poner su celda de color x. Pero no están hechos para hacer código pesado....

Si el caso es que las filas se añaden de forma síncrona,  tu código pueda susbsistir (como en el ejemplo añadido), pero repito si es asíncrono,  en cuanto no se cierre de vuelta el evento no se disparará el siguiente evento pero la fila si será añadida por lo que tus notificaciones irán falseando los sucesos (inadvertidamente claro).

Esto fue programado así debido a ciertas malas prácticas si se vuelcan 3000 filas en pocos sg. si el usuario ha de pulsar 3000 veces tardará 1 ó 2 horas en responder a la 'genialidad' del programador a la hora de 'ayudar' al usuario. Por eso se añadieron características para añadidos síncronos o asíncronos.

Mi recomendación es que tu código sea tan simple como mostrar un contador de filas... y en el evento del datagridview lo que haces es leer la propiedad rowcount. Opcionalmente activas un timer con un intervalo pequeño que cambie una 'señal' a color rojo y a su vez ese timer dispare otro con intervalo pongamos a 300 msg. que lo vuelva gris al salir de ambos timers en caa uno se desactivan a sí mismos, así cuando se van añadiendo registros al datagridview, aparte de indicarlo en el contador que podría no ser muy visible hay un pequeño parapadeo del 'semáforo', si se añaden muchos registros seguidos el parpadeo será muy contínuo... el semáforo ponlo justo justo debajo de la etiqueta del contador así la atención cae a la vez sobre lo mismo....

Ahora bien lo anterior sólo se aplica cuando el origen es a su vez asíncrono, como una base de datos, si es el usuario quien añade la fila (o como en el ejemplo que te pongo al final) el caso es ditinto. Existen los eventos : RowsAdded y UsersAddedRow recuerda tambien que tienes RowsRemoved y (UserDeleteRow y UserDeletingRow esta para validar si el borrado se efectua o simplemente para copiar la fila antes de eliminarla y pasarla por ejemplo a otro datagridview oculto para acciones de deshacer, etc...)

nota: para conocer los eventos de un objeto, mira en el panel de propiedades del objeto, verás en su cabecera varos iconos: el 1º ordena por categorías el 2º por orden alfabético, pero el 3º y el 4º son selectores para: ver propiedades del objeto o ver eventos...  Cuando hagas dobleclcick sobre un evento te lleva a la ventana de código cargando ya la llamada del evento.

nota2: cuando se dispara el evento userAddedRow también se dispara RowsAdded, tenlo en cuenta para no duplicar código y tener 'efectos' indeseados...
Código: Visual Basic
  1.  
  2. Public Class Form1  
  3.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         call Rellenar_DataGridV()
  5.     End Sub
  6.  
  7.     Private Sub Rellenar_DataGridView() ' lo rellenamos con datos tomados del foro...
  8.        DataGridView1.ColumnCount = 3
  9.         DataGridView1.ColumnHeadersVisible = True
  10.  
  11.         Dim miEstiloCabecera As New DataGridViewCellStyle()
  12.  
  13.         miEstiloCabecera.BackColor = Color.Orange
  14.         miEstiloCabecera.ForeColor = Color.BlueViolet
  15.         miEstiloCabecera.Alignment = DataGridViewContentAlignment.MiddleCenter
  16.         miEstiloCabecera.Font = New Font("Arial", 20, FontStyle.Underline + Font.Bold, GraphicsUnit.Pixel)
  17.         DataGridView1.ColumnHeadersDefaultCellStyle = miEstiloCabecera
  18.         ' nota si hemos creado diferentes perfiles de estilo de cabecera se usan desde la siguiente línea
  19.        DataGridView1.ColumnHeadersDefaultCellStyle.ApplyStyle(miEstiloCabecera)
  20.         DataGridView1.EnableHeadersVisualStyles = True
  21.  
  22.         DataGridView1.Columns(0).Name = "Nombre Usuario"
  23.         DataGridView1.Columns(1).Name = "Ubicación"
  24.         DataGridView1.Columns(2).Name = "nº Mensajes"
  25.         DataGridView1.Columns(3).Name = "Rango"
  26.  
  27.         Dim fila1() As String = {"Iron Man", "Barcelona", "1005", "Administrador"}
  28.         Dim fila2() As String = {"Avalon", "Avalon", "447", "Usuario muy activo"}
  29.         Dim fila3() As String = {"ibito", "Méjico", "519", "Miembro HIPER activo"}
  30.         Dim fila4() As String = {"Robert.29", "Valladolid", "421", "Usuario muy activo"}
  31.         Dim fila5() As String = {"Marlon", "?????", "152", "Miembro muy activo"}
  32.         Dim fila6() As String = {"r3dsk1", "La tierra de los conocimientos...", "291", "Miembro muy activo"}
  33.         Dim fila7() As String = {"Jimbenit", "Colombia", "70", "Miembro activo"}
  34.         Dim filas() As Object = {fila1, fila2, fila3, fila4, fila5, fila6, fila7}
  35.  
  36.         Dim Fila As String()
  37.         For Each Fila In filas
  38.             DataGridView1.Rows.Add(Fila)
  39.         Next Fila
  40.     End Sub          
  41.      
  42.      Private Sub DataGridView1_RowsAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles    DataGridView1.RowsAdded
  43.         MsgBox("La fila nº: " & DataGridView1.RowCount & " ha sido cargada...")
  44.     End Sub
  45.  
  46.  end class
  47.  
  48.  
«Ma non troppo»
----> ModoVacaciones = False<----

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Re: Duda en evento de un DataGridView
« Respuesta #2 en: Miércoles 15 de Octubre de 2008, 18:19 »
0
Bueno y alguien me podria decir como agrego elementos por medio de codigo a una columna de un DataGridView que esta configurada a DataGridViewComboBoxColumn , lo que quiero saber es como le ingreso las opciones que dispondrá el usuario en el combobox de esa columna cuando mi aplicacion este en ejecución

Agradezco mucho a Nebire por su colaboración


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]