Visual Basic.NET - Desplazarse por un DatagridView mostrando la linea en un Form

 
Vista:
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desplazarse por un DatagridView mostrando la linea en un Form

Publicado por Miguel (281 intervenciones) el 25/10/2018 20:46:03
Tengo un formulario que con hacer click en el DataGridView me muestra los datos de la linea correspondiente.
Pero ahora he añdido cuatro botones para desplazarme, pero el caso que si primero actuamos con los botones da error pero si primero hago click en una linea y después sigo con los botones entonces funciona bien.
Puede alguien donde tengo el fallo pues no consigo verlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
'Posicionarse en una fila del DatagridView para ver los datos
Private Sub Dgv_Click() Handles dgv.Click
    fila = dgv.CurrentRow.Index
    dgv.Rows(fila).Selected = True
    Me.txtId.Text = CType(dgv.Item("Id", dgv.SelectedRows(0).Index).Value, String)
    Me.txtCalle.Text = CType(dgv.Item("Calle", dgv.SelectedRows(0).Index).Value, String)
End Sub
 
Private Sub Primero(ByVal sender As System.Object, ByVal e As System.EventArgs)
    fila = 0
    cargaCalles()
    MessageBox.Show("Está en el primer registro", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Sub
 
Private Sub Anterior(ByVal sender As System.Object, ByVal e As System.EventArgs)
    If fila = 0 Then
    Else
        fila -= 1
        cargaCalles()
    End If
End Sub
 
Private Sub Siguiente(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Try
        If fila = Obj.ds.Tables("Calles").Rows.Count - 1 Then
        Else
            fila += 1
            cargaCalles()
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information, ToString)
    End Try
End Sub
 
Private Sub Ultimo(ByVal sender As System.Object, ByVal e As System.EventArgs)
    fila = Obj.ds.Tables("Calles").Rows.Count - 1
    cargaCalles()
    MessageBox.Show("Está en el último registro", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Sub
 
Sub cargaCalles()
    Try
        Obj.da = New MySql.Data.MySqlClient.MySqlDataAdapter("Select * from Calles", Obj.con)
        Dim cb As MySql.Data.MySqlClient.MySqlCommandBuilder = New MySql.Data.MySqlClient.MySqlCommandBuilder(Obj.da)
        Obj.ds = New DataSet
        Obj.da.Fill(Obj.ds, "Calles")
        Dim dr As DataRow
        dr = Obj.ds.Tables("Calles").Rows(fila)
        Me.txtId.Text = CStr(dr("Id"))
        Me.txtCalle.Text = CStr(dr("Calle"))
        Me.dgv.DataSource = Obj.ds.Tables("Calles")
        dgv.CurrentCell = dgv.Rows(fila).Cells(0)
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information, ToString)
    End Try
End Sub

Gracias y un saludo
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: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desplazarse por un DatagridView mostrando la linea en un Form

Publicado por giancarlo (488 intervenciones) el 27/10/2018 05:07:08
Hola, se me ocurre que cuando usas los botones no validas que pasa si no tienes una fila seleccionada, cuando no seleccionas alguna fila el current row sería nothing o null quizas, con index -1 quizas

en los botones primero y ultima, no deberías tener problemas

en el boton siguiente y anterior, podrías cambiar a algo así

anterior
1
2
3
4
If fila >0 Then
        fila -= 1
        cargaCalles()
end If

siguiente
1
2
3
4
If fila <datagridview1.rows.count-1 Then
        fila -= 1
        cargaCalles()
end If

si sigues con el problema, ejecuta el procedimiento en depuración paso a paso para que veas tus variabes y como se estan ejecutando
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: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desplazarse por un DatagridView mostrando la linea en un Form

Publicado por Miguel (281 intervenciones) el 27/10/2018 12:05:58
Gracias Giancarlo el problema ha sido que no había puesto el foco en el DatagridView y por eso no funcionaba. Me he dado cuenta porque cuando hacia el Dgv_Click si se desplaza los botones. Un despiste.

Muchas 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: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desplazarse por un DatagridView mostrando la linea en un Form

Publicado por giancarlo (488 intervenciones) el 27/10/2018 12:54:35
Excelente, veo que estaa usando el evento clic del datagridview, te recomendaría el evento cellclick que se ehecita al hacer clic en alguna celda, el que usas se ejecuta al hacer clic en cualquier lado del datagridview
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: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desplazarse por un DatagridView mostrando la linea en un Form

Publicado por Miguel (281 intervenciones) el 27/10/2018 13:26:04
Giancarlo yo tenía la idea de que con el foco en el DataGridView era suficiente pero tampoco funciona. Así que he puesto lo que me indicas paro en el siguente me da un error.
Primero he importado :Imports System.Windows.Forms.DataGridView
Luego pongo

1
2
3
4
5
6
7
8
9
10
11
Private Sub Siguiente(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Try
        If fila < DataGridView.Rows.Count - 1 Then    :::::::::::::::'Aqui me da error en el DatagridView
            fila -= 1
            mueveSeguro()
            cargaVentas()
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information, ToString)
    End Try
End Sub

Puedes decirme por favor la razón del error.

Gracias y un saludo
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: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desplazarse por un DatagridView mostrando la linea en un Form

Publicado por Miguel (281 intervenciones) el 27/10/2018 14:11:42
Giancarlo ya está resuelto pero en "Siguiente" te has despistado era sumar uno a la fila y mi error era que el nombre del DatagridView yo le he llamado Dgv.

1
2
3
4
5
6
7
8
9
10
Private Sub Siguiente(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Try
        If fila < dgv.Rows.Count - 1 Then
            fila += 1
            cargaCalles()
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information, ToString)
    End Try
End Sub

Muchas gracias y un saludo
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