none
Sumas celda de un datagridview

    Pregunta

  • Hola a todos acudo a ustedes para una ayudita a ver si me la pueden dar es lo siguiente quiero sumar las celdas de un datagridview

    se que para sumar, es por ejemplo: dgvNomina.Rows(varCON_FILA).Cells(3).Value=dgvNomina.Rows(varCON_FILA).Cells(1).Value+dgvNomina.Rows(varCON_FILA).Cells(2).Value hasta hay estoy claro, pero mi problema esta en que quiero que esas celda se sumen mientras estoy escribiendo en ella osea cada vez que digitalice un numero la celda donde quiero el resultado cambie de antemano gracias y espero haberme explicado...

    martes, 7 de marzo de 2017 12:19

Respuestas

  • Gracias Amigo me ayudo en algo su respuesta aunque le comento que el keydown da un retardo en el numero que me debe dar y pero logre resolver por si alguien se lo pregunta igual que yo este fue el codigo que utilice

     Private Sub cellTextBox_TextChanged(sender As Object, e As EventArgs) Handles cellTextBox.TextChanged
            Dim Celda As DataGridViewCell = Me.dgvNomina.CurrentCell()
            Dim fila As DataGridViewRow = Me.dgvNomina.CurrentRow()
            varSUE_INTEG = 0
            Dim varCON_FILA As Integer = 0
            For varCON_FILA = 5 To 17 'Aqui recorro la columnas a sumar
                If varCON_FILA <> 7 And varCON_FILA <> 9 And varCON_FILA <> 10 Then 'Aqui es cuestion de uno esta son columnas que no debo sumar
                    If varCON_FILA = Celda.ColumnIndex Then 'Aqui pongo este condicional por cuando se edita el valor que debo tomar es le del celltextbox no me da el de la columna
                        varSUE_INTEG = varSUE_INTEG + cellTextBox.Text
                    Else' y aqui simplemente sumo la columnas
                        varSUE_INTEG = varSUE_INTEG + Convert.ToDouble(dgvNomina.Rows(fila.Index).Cells(varCON_FILA).Value)
                    End If
                End If
            Next varCON_FILA
            Call Recalcular_Vacaciones()
        End Sub

    espero se de utilidad para otras personas y si hay una manera mejor bienvenida sea...

    martes, 7 de marzo de 2017 18:44

Todas las respuestas

  • Si puedes poner un snippet de código siempre es más facil responderte y te puedo aportar ejemplos con tu código. De todas formas ¿has probado a usar los eventos predifinidos del datagridview?

    Ejemplo VB:

    PrivateSub CellValueChanged(ByVal sender AsObject, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles dgvNomina.CellValueChanged
    dgvNomina.Rows(varCON_FILA).Cells(3).Value=dgvNomina.Rows(varCON_FILA).Cells(1).Value+dgvNomina.Rows(varCON_FILA).Cells(2).Value
     EndSub

    Referencia:

    https://msdn.microsoft.com/es-es/library/system.windows.forms.datagridview.cellvaluechanged%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

    Espero que esto sea a lo que referias :P




    • Propuesto como respuesta JavierIF martes, 7 de marzo de 2017 12:28
    • Votado como útil Joyce_ACModerator martes, 7 de marzo de 2017 15:31
    martes, 7 de marzo de 2017 12:27
  • Gracias amigo en efecto ese evento funciona pero el calcula al termina de escribir y dejar de editar en la celda pero lo que quiero es que calcule con cada tecla que presione osea sin salir del modo de edición yo tengo en ese evento tengo

    esto Me.dgvNomina.Rows(e.RowIndex).Cells(9).Value = Convert.ToDouble(Me.dgvNomina.Rows(e.RowIndex).Cells(5).Value / 2).ToString("###,##0.#0") + Convert.ToDouble(Me.dgvNomina.Rows(e.RowIndex).Cells(15).Value / 2).ToString("###,##0.#0") 

    si tengo el la celda(5)= 10 y en la celda(15) a medida que vaya escribiendo numeros la celda(9) vaya cambiando mientras siga en el modo de EditingControlShowing...

    martes, 7 de marzo de 2017 13:06
  • Ok.. a ver que tal con esto:

    Private Sub DataGridView1_EditingControlShowing(sender As System.Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvNomina.EditingControlShowing AddHandler e.Control.KeyDown, AddressOf cell_KeyDown End Sub Private Sub cell_KeyDown(sender As Object, e As KeyEventArgs) MessageBox.Show("Probando esto..")

    Me.dgvNomina.Rows(e.RowIndex).Cells(9).Value = Convert.ToDouble(Me.dgvNomina.Rows(e.RowIndex).Cells(5).Value / 2).ToString("###,##0.#0") + Convert.ToDouble(Me.dgvNomina.Rows(e.RowIndex).Cells(15).Value / 2).ToString("###,##0.#0") End Sub



    martes, 7 de marzo de 2017 13:28
  • Gracias Amigo me ayudo en algo su respuesta aunque le comento que el keydown da un retardo en el numero que me debe dar y pero logre resolver por si alguien se lo pregunta igual que yo este fue el codigo que utilice

     Private Sub cellTextBox_TextChanged(sender As Object, e As EventArgs) Handles cellTextBox.TextChanged
            Dim Celda As DataGridViewCell = Me.dgvNomina.CurrentCell()
            Dim fila As DataGridViewRow = Me.dgvNomina.CurrentRow()
            varSUE_INTEG = 0
            Dim varCON_FILA As Integer = 0
            For varCON_FILA = 5 To 17 'Aqui recorro la columnas a sumar
                If varCON_FILA <> 7 And varCON_FILA <> 9 And varCON_FILA <> 10 Then 'Aqui es cuestion de uno esta son columnas que no debo sumar
                    If varCON_FILA = Celda.ColumnIndex Then 'Aqui pongo este condicional por cuando se edita el valor que debo tomar es le del celltextbox no me da el de la columna
                        varSUE_INTEG = varSUE_INTEG + cellTextBox.Text
                    Else' y aqui simplemente sumo la columnas
                        varSUE_INTEG = varSUE_INTEG + Convert.ToDouble(dgvNomina.Rows(fila.Index).Cells(varCON_FILA).Value)
                    End If
                End If
            Next varCON_FILA
            Call Recalcular_Vacaciones()
        End Sub

    espero se de utilidad para otras personas y si hay una manera mejor bienvenida sea...

    martes, 7 de marzo de 2017 18:44