none
Obtener un valor de una celda a medida que cambia la fila de un datagridview RRS feed

  • Pregunta

  • Buenos días, necesito consultar, tengo un datagridview con ingresos y egresos de articulos. necesito obtener el total existente de los articulos cada ves que cambio la fila del datagridview. para ello tengo una consulta en mi clase articulos que me devuelve ese dato, a partir de pasar el idArticulo como parametro. Intenté algo así, pero me trae el total del articulo anterior, pues se produce cuando una fila recibe el foco de entrada, pero antes de que se convierta en la fila actual


    Private Sub dgv_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.RowEnter
            txbTotal.Text = _logInventario.ObtenerTotalArticulo(bsArticulos.Current.item("idArticulo"))
    End Sub

    En concreto, en que evento del datagridview puedo llamar al metodo de mi clase y obtener el total a medida que vaya cambiando de fila del datagridview, o que parametro debiera pasarle? gracias!

    viernes, 9 de junio de 2017 12:20

Respuestas

  • Puedes reconocer el momento en que la selección de fila cambia cuando se produce el evento 'SelectionChanged', por ejemplo:

    Private Sub dgv_SelectionChanged(sender As Object, e As EventArgs) Handles dgv.SelectionChanged
    
    	Dim Row = DirectCast(sender, DataGridView).CurrentRow
    	
    	txbTotal.Text = String.Empty
    	If Row IsNot Nothing Then
    		txbTotal.Text = _logInventario.ObtenerTotalArticulo(
    					Convert.ToInt32(Row.Cells("idArticulo").Value)).ToString
    	End If
    		
    End Sub

    Entiendo tienes configurado la propiedad DataGridView.SelectionMode a 'FullRowSelect'.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Marcelo PF viernes, 9 de junio de 2017 20:03
    • Marcado como respuesta ClauBC lunes, 12 de junio de 2017 12:37
    viernes, 9 de junio de 2017 16:29

Todas las respuestas

  • Hola:

    Podrías tener una columna calculada en tu datagridview y a medida que haya movimientos de artículos, te actualice la misma al momento, después dependerá si quieres llevas ese resultado a algún otro sitio o con ello ya va bien.

    Puedes utilizar algo parecido a esto y adaptado a tus necesidades. Ahí veras que el valor de cells es el número de índice de la columna.

     Private Sub RecorrerLineasDataGirdView()
            'Calculamos el valor de la columna "VALOR REAL"
            For Each row As DataGridViewRow In DataGridView1.Rows
                row.Cells(9).Value = Val(row.Cells(6).Value) + Val(row.Cells(7).Value) - Val(row.Cells(8).Value)
            Next
        End Sub

    Private Sub DataGridView1_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

    RecorrerLineasDatagridView

    end sub


    Yo lo tengo así por conveniencia ya que hay otras operaciones, pero remitiéndome a tu pregunta, el evento tendría que ser CellEndEdit.

    Un saludo.

    Gemma


    viernes, 9 de junio de 2017 14:03
  • Hola:

     ¿Deseas obtener el valor del total desde alguna consulta a una Bd o de donde es que deseas obtener este valor?, ¿De alguna celda del row actual?

     Si deseas tomar el valor de alguna celda de una columna en especifico entonces deberias de usar el e.RowIndex para conocer el row que esta seleccionado actualmente, podría ser precisamente en el RowEnter:

    If(e.RowIndex = -1) Then

      Return

    End If

    dgv.Rows(e.RowIndex)

     Espero te de un poco de luz.


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 9 de junio de 2017 14:31
  • Puedes reconocer el momento en que la selección de fila cambia cuando se produce el evento 'SelectionChanged', por ejemplo:

    Private Sub dgv_SelectionChanged(sender As Object, e As EventArgs) Handles dgv.SelectionChanged
    
    	Dim Row = DirectCast(sender, DataGridView).CurrentRow
    	
    	txbTotal.Text = String.Empty
    	If Row IsNot Nothing Then
    		txbTotal.Text = _logInventario.ObtenerTotalArticulo(
    					Convert.ToInt32(Row.Cells("idArticulo").Value)).ToString
    	End If
    		
    End Sub

    Entiendo tienes configurado la propiedad DataGridView.SelectionMode a 'FullRowSelect'.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Marcelo PF viernes, 9 de junio de 2017 20:03
    • Marcado como respuesta ClauBC lunes, 12 de junio de 2017 12:37
    viernes, 9 de junio de 2017 16:29
  • Marcelo PF, tu sugerencia funcionó correctamente.Gracias!
    lunes, 12 de junio de 2017 12:38