Foros del Web » Programación para mayores de 30 ;) » .NET »

Mostrando total de registros de un GridView

Estas en el tema de Mostrando total de registros de un GridView en el foro de .NET en Foros del Web. Buenas. No sé qué ocurre. Primero les muestro el código: Código: Private Sub frmMantenimientos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim objMantenimientos ...
  #1 (permalink)  
Antiguo 01/08/2007, 07:54
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Mostrando total de registros de un GridView

Buenas.
No sé qué ocurre. Primero les muestro el código:
Código:
Private Sub frmMantenimientos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim objMantenimientos As New MantenimientosDB
    miGrid.DataSource = objMantenimientos.Lista(FiltroActual)
    miGrid.DataMember = "Mantenimientos"
    miGrid.Columns("IDMantenimiento").Visible = False
    **If miGrid.RowCount > 0 Then miGrid.CurrentCell = miGrid.Rows(0).Cells("NContrato")
End Sub

Private Sub miGrid_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles miGrid.CurrentCellChanged
    PosicionRegistro()
End Sub

Private Sub PosicionRegistro()
    If Not miGrid.CurrentCell Is Nothing Then
        Dim Pos As Integer = miGrid.CurrentCell.RowIndex
        Dim MaxPos As Integer = miGrid.Rows.Count
        lblRegistro.Text = "Registro " & Pos + 1 & " de " & MaxPos
    End If
End Sub
El problema que tengo, es que si depuro este código a partir de la línea con los dos asteriscos(**), veo que llega una primera vez al evento CurrentCellChanged, que a su vez pasa la acción a la función PosicionRegistro, y me da los valores Pos=0 y MaxPos=402. Hasta aquí perfecto. El problema es que sigo depurando paso a paso, y me entra una segunda vez en el mismo evento, pero esta vez me da los valores Pos=0 y MaxPos=1.
No comprendo por qué entra una segunda vez, y aun así, tampoco comprendo por qué la segunda vez tiene esos valores en vez de tener los mismos de hace un momento, porqué no ha cambiado nada, y de hecho, al terminar de cargar el formulario, estoy viendo un listado de 402 registros, y un label que me dice "Registro 1 de 1".
Espero que alguien me ilumine un poco porqué me he quedado pasmado con esto, y no se por donde cogerlo.
Gracias!!
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 02/08/2007, 08:08
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Re: Mostrando total de registros de un GridView

El problema surge al cambiar la fuente de datos, lo que puedes hacer es eliminar momentáneamente el manejador del evento CurrentCellChanged o usar alguna bandera que te indique que todavía no se cargaron los datos. Un ejemplo del primero es:
Código:
Private Sub frmMantenimientos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    RemoveHandler miGrid.CurrentCellChanged, AddressOf miGrid_CurrentCellChanged
    Dim objMantenimientos As New MantenimientosDB
    miGrid.DataSource = objMantenimientos.Lista(FiltroActual)
    miGrid.DataMember = "Mantenimientos"
    miGrid.Columns("IDMantenimiento").Visible = False
    AddHandler miGrid.CurrentCellChanged, AddressOf miGrid_CurrentCellChanged

    **If miGrid.RowCount > 0 Then miGrid.CurrentCell = miGrid.Rows(0).Cells("NContrato")
End Sub
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 07/08/2007, 03:33
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Re: Mostrando total de registros de un GridView

Buenas.
xknown, como ya sabes, no solucioné el problema ni a través de la bandera, ni quitándole el manejador del evento y volviéndoselo a poner, como propones.
Agrego que está probado en otra máquina y ocurre lo mismo.
Y agrego, muy importante, lo siguiente:
El último IF lo sustituyo por esto:
Código:
If miGrid.RowCount > 0 Then
    miGrid.CurrentCell = miGrid.Rows(1).Cells("NContrato")
    miGrid.CurrentCell = miGrid.Rows(0).Cells("NContrato")
End If
Y el resultado sigue siendo un grid de 402 filas, y un mensaje que muestra "Registro 1 de 1".
Pero en cambio, invierto las dos líneas del IF:
Código:
If miGrid.RowCount > 0 Then
    miGrid.CurrentCell = miGrid.Rows(0).Cells("NContrato")
    miGrid.CurrentCell = miGrid.Rows(1).Cells("NContrato")
End If
Y ahora el resultado son las 402 filas, pero esta vez el mensaje es "Registro 2 de 402".

Alguien tiene alguna idea de qué "narices" pasa aquí?

O sea, la cosa me funciona en el momento que realizo algún movimiento sobre el Grid. Entonces me empeño en provocar ese movimiento por código, al final del Page_Load y me encuentro con la sorpresa de que si lo posiciono en la segunda fila todo va bien, pero si luego lo vuelvo a posicionar en la primera fila me muestra "Registro 1 de 1". Una vez cargado, puedo moverme por el grid y no hay problemas. Solo tengo el problema de ese primer momento.
En fin, agradezco a quien pueda ayudarme con esto!
Un saludo!
__________________
..:: moNTeZIon ::..

Última edición por moNTeZIon; 07/08/2007 a las 03:38
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 04:52.