none
DUDA CON DGV RRS feed

  • Pregunta

  • Tengo un formulario que tiene un DGV que se enlaza a una tabla y una serie de campos que se llenan en caso de que seleccione alguna fila del DGV.

    El DGV lo cargo con esta rutina:

    Private Sub LlenarDataGridView()
            Try
                'Cargo en el Load el datagridview de los objetos de las familias de componentes
                ST1 = "SELECT ID, CODFA1 as 'CODIGO', DESFA1 as 'DETALLE', FA1VIG AS 'VIGENTE' FROM COMP_FAMILIA_1 order by desfa1"
    
                Using cmd As New SQLite.SQLiteCommand(ST1, conn)
                    Using da As New SQLite.SQLiteDataAdapter(cmd)
                        Dim dt As New DataTable()
                        da.Fill(dt)
                        Me.DataGridView1.DataSource = dt
                    End Using
                End Using
                Me.DataGridView1.ClearSelection()
    
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString, "Error!!!", MessageBoxButtons.OK, MessageBoxIcon.Error)
                If conn.State = ConnectionState.Open Then conn.Close()
            End Try
        End Sub

    En el caso de que se seleccione algo cargo en el SelectionChanged del DGV la siguiente rutina

     Private Sub DataGridView1_SelectionChanged(sender As Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged
            If ((DataGridView1.CurrentRow Is Nothing) OrElse (DataGridView1.SelectedRows.Count <> 0)) Then
                Call EstadoDos()
            Else
                Call EstadoUno()
            End If
    
            If NuevoRegistro = True Then Exit Sub
            If EliminarRegistro = True Then Exit Sub
    
            'Ahora hago un select sobre los datos seleccionados
            Dim Fila As Integer = Me.DataGridView1.CurrentRow.Index
            Dim CodFamilia As Long = Me.DataGridView1.Item(0, Fila).Value
            Try
                Call CargarDatosForm(CodFamilia)
    
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString, "Error inesperado en la carga de algunos Campos del registro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End Sub

    EstadoUno y EstadoDos son dos rutinas donde habilito o deshabilito botones de ABM de registros. Despues tengo la rutina CargarDatosForm que es la siguiente:

    Private Sub CargarDatosForm(ByVal ID As String)
            Try
                conn.Open()
    
                Dim myCommand As SQLite.SQLiteCommand
                Dim oDataReader As SQLite.SQLiteDataReader
    
                ST1 = "SELECT DESFA1, CODFA1, FA1VIG FROM COMP_FAMILIA_1 where ID= @ID"
    
                myCommand = New SQLite.SQLiteCommand(ST1, conn)
                myCommand.Parameters.AddWithValue("@ID", ID)
                oDataReader = myCommand.ExecuteReader()
    
                If oDataReader.Read() Then
                    Me.txtCODFA1.Text = CStr(oDataReader("codfa1"))
                    Me.txtDESFA1.Text = CStr(oDataReader("desfa1"))
    
                    If oDataReader("fa1vig") = 1 Then
                        Me.ChkVigente.CheckState = CheckState.Checked
                    Else
                        Me.ChkVigente.CheckState = CheckState.Unchecked
                    End If
                End If
    
                conn.Close()
    
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString, "Error inesperado en la carga de algunos Campos del registro", MessageBoxButtons.OK, MessageBoxIcon.Error)
                If conn.State = ConnectionState.Open Then conn.Close()
            End Try
        End Sub

    Ahora bien... cuando se carga el formulario, me queda como cargado el primer registro... es como si hubiese hecho clic en el primer registro... como puedo evitar eso ?


    Marcelo Robin

    • Cambiado Enrique M. Montejo martes, 29 de octubre de 2013 7:57 Controles de Windows Forms
    lunes, 21 de octubre de 2013 14:34

Todas las respuestas

  • hola

    porque en lugar de esto

    Dim Fila As Integer = Me.DataGridView1.CurrentRow.Index

    Dim CodFamilia As Long = Me.DataGridView1.Item(0, Fila).Value

    solo usas

    Dim CodFamilia As Long = Me.DataGridView1.CurrentRow(0).Value

    digo directo accedes a la primer columna de la row seleccionada

    ----

    valida que este tomendose el id del row seleccionado

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 21 de octubre de 2013 14:44
  •  Dim CodFamilia As Long = Me.DataGridView1.CurrentRow.Cells(0).Value

    colocando esto me sigue como preseleccionando el primer registro del dgv... 

    • Editado Mint Man lunes, 21 de octubre de 2013 15:03
    lunes, 21 de octubre de 2013 14:48
  • No me va a quedar otra opción que forzar la limpieza de los textbox ya que sigue seleccionandose la primer linea del DGV

    Marcelo Robin

    lunes, 21 de octubre de 2013 15:20