Calcular datos en datagriew y mostrarlos en txtBox

Iniciado por nolasco281, 26 Mayo 2015, 07:56 AM

0 Miembros y 1 Visitante están viendo este tema.

nolasco281

Hola como están.
Mi consulta es la siguiente, Como puedo calcular datos en mi griewview Control(Telerik) y mostrarlos en un textbox el problema con que me topo es que estoy haciendo un form de facturación (imagen).

Cuando agrego el producto el subtotal me la va cargando según el precio del articulo el problema viene cuando borro un producto del griewview como hago para que el subtotal baje, según esa columna del griewview.



Esto se puede, no comparto ningún código porque no tengo nada aun, no se me ocurre como manipular una columna del griewview todavía.

Saludos.
Lo que se puede imaginar... se puede programar.

Eleкtro

#1
Suscríbete al evento ItemRemoving, examinas el valor de la celda de la fila que estás eliminando, y lo restas al subtotal,
u otra forma, suscríbete al evento ItemRemoved, y seguidamente iteras las celdas de esa columna para volver a hacer la suma descartando automaticamente la fila que ya no existe.

Saludos








seba123neo

pues basicamente tenes que hacerte una funcion que recorra esa columna y te devuelva el resultado, y que cada vez que agreges o elimines la llamas para actualizar el numero.

el tema de todo esto, es que lo ideal no es que dependas de una columna. que pasa si algun dia se te ocurre agregar mas columnas, tendrias que cambiar el indice de la columna en todos los lados que lo uses, seria inmanejable.

Lo ideal (y en cualquier sistema de facturacion serio lo hacen asi), es usar clases y objetos, las clases se encargan de realizar todos los calculos internamente (totales, impuestos, etc) con sus propiedades get/set y metodos. de esa forma te olvidas de la interfaz grafica y no tenes que andar recorriendo ningun control para calcular nada. claro que para hacer esto tenes que saber bien en manejo de clases (POO) y como usarlas.

Cada entidad del programa deberia ser una clase (clientes, articulos, sucursales, depositos) incluso el comprobante (la factura) es una clase con objetos articulos dentro (arraylist de objetos).

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

nolasco281

#3
Hola gracias por responder a los dos.

   
Código (vbnet) [Seleccionar]
Private Function Sumar(ByVal nombre_Columna As String, ByVal Dgv As DataGridView) As Double
      Dim Total As Double = 0
      ' recorrer las filas y obtener los items de la columna indicada en "nombre_Columna"  
      Try
         For i As Integer = 0 To Dgv.RowCount - 1
            Total = Total + CDbl(Dgv.Item(nombre_Columna, i).Value)
         Next
      Catch ex As Exception
         MsgBox(ex.Message.ToString)
      End Try
      Return Total
   End Function


No se cual es el equivalente DataGridView en Telerik

Ya que si uso el RadGriewView me muestra un error en la parte del item
Código (vbnet) [Seleccionar]
Total = Total + CDbl(Dgv.Item(nombre_Columna, i).Value)

Luego en el evento CellValueChanged
Código (vbnet) [Seleccionar]

txtSubTotal.Text = FormatCurrency(Sumar("Monto", gvFactura), 2).ToString 'Me muestra un error por que gvFactura no es parte del DataGridView


luego en un evento de remover
Código (vbnet) [Seleccionar]
' La culmna a sumar se llama Monto
  txtSubTotal.Text = FormatCurrency(Sumar("Monto", gvFactura), 2).ToString()  


Veo que el unico evento que esta es el Control Removed

No esta  ItemRemoving ni ItemRemoved.

Saludos.
Lo que se puede imaginar... se puede programar.

Eleкtro

Cita de: nolasco281 en 26 Mayo 2015, 09:07 AMNo esta  ItemRemoving ni ItemRemoved.

Tienes razón, pensaba en otra cosa, es RadGridView.UserDeletingRow y RadGridView.UserDeletedRow

Saludos








nolasco281

#5
Hola ya casi lo tengo resuelto.

el problema es en la funcion es en esta instruccion.

Código (vbnet) [Seleccionar]
total = total + CDbl(dgv.Item(nombre_Columna, a).Value)

Segun yo su equivalente es. Oh no es asi?.

Código (vbnet) [Seleccionar]
total = total + CDbl(dgv.Rows.Add(nombre_Columna, a).Value)

Saludos.
Lo que se puede imaginar... se puede programar.

nolasco281

#6
Hola ya lo resolvi  

Me estaba complicando la vida.



El dataGriev tiene un evento de sumar summary
Código (vbnet) [Seleccionar]

Dim summaryItem As New GridViewSummaryItem("Monto", "Total = {0}", GridAggregateFunction.Sum)

Dim summaryRowItem As New GridViewSummaryRowItem()

summaryRowItem.Add(summaryItem)
Me.gvFactura.SummaryRowsTop.Add(summaryRowItem)


Y luego use el evento GroupSummaryEvaluate para manipular el dato.
Código (vbnet) [Seleccionar]

Private Sub GvFactura_GroupSummaryEvaluate(sender As System.Object, e As Telerik.WinControls.UI.GroupSummaryEvaluationEventArgs) Handles gvFactura.GroupSummaryEvaluate
       txtSubtotal.Text = e.Value
   End Sub


Saludos.
Lo que se puede imaginar... se puede programar.