Visual Basic.NET - Mejorar codigo

 
Vista:

Mejorar codigo

Publicado por Sebastian (1 intervención) el 21/09/2015 04:02:37
Hola a todos, tengo el sig. codigo para sumar los valores de una columna de un DataGridView

1
2
3
4
5
6
7
8
9
10
11
Dim total As Decimal = 0D
Dim suma_articulos As String
For Each dgvr As DataGridViewRow In Me.dataalmacen.Rows
suma_articulos = "" & dgvr.Cells(9).Value
'Eliminamos los puntos
 suma_articulos = Replace(suma_articulos, ".", "")
'Reemplazamos las comas
suma_articulos = Replace(suma_articulos, ",", ".")
total += Val(suma_articulos)
Next
txt_total.Text = total.ToString("#0.00")

Funciona Perfecto, suma todos los valores de la columna Nº 9 y me lo devuelve al txt_total

Lo q necesito es mejorar el codigo para que se sumen los valores de la columna Nº 9 unicamente si el valor de la columna llamada "Concepto" es igual a "1", es decir que se sumen unicamente aquellas filas que tengan en la columna "Concepto" el valor "1"

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

Mejorar codigo

Publicado por Miguel (476 intervenciones) el 21/09/2015 07:56:01
Hola, puedes utilizar un "If" para consultar el valor de la columna "Concepto" dentro del "For Each"...

Saludos
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

Mejorar codigo

Publicado por Diego (8 intervenciones) el 21/09/2015 20:39:03
Y una consulta SQL a la base de datos?
Algo asi como....

1
2
TotalCaja="select sum(caja) from ventas where concepto=1 "
txt_total.Text = Format(VentasTableAdapter.TotalCaja, "C")

Diseñas la consulta en el diseñador de dataset
Mas simple y código "mejorado"
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

Mejorar codigo

Publicado por marco (21 intervenciones) el 21/09/2015 22:47:14
una consulta por que eliminas los puntos y lo reemplazas con coma ?????
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

Mejorar codigo

Publicado por David (45 intervenciones) el 22/09/2015 10:56:51
No cambia los puntos por comas, elimina los puntos y después cambia las comas por puntos, porque la coma es el separador de miles y el punto el de decimales, para que haga correctamente la conversión de texto a número con decimales (si tiene)
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

Mejorar codigo

Publicado por marco (21 intervenciones) el 24/09/2015 03:07:04
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
'no entiendo por que reemplazas caracteres lo unico que tienes que hacer es dar formato al texto y listo ten en cuenta el formato de la region
'con esto das formato al datagridview 
Me.datagridview.Columns("nombredecolumna").DefaultCellStyle.Format = "n2"
n2 = dos decimales
n3 = tres decimales
 
'con esto das formato al texto
 TXTefectivo.Text = FormatNumber(efectivosoles, 2)
 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
  Try
 
            Dim ds As New DataSet
            Dim dtSource As DataTable
 
            Dim cmd As New OleDb.OleDbCommand("select c1,c2,c3 from caja", Cn)
 
            Dim da As New OleDb.OleDbDataAdapter(cmd)
            da.Fill(ds, "Items")
            dtSource = ds.Tables("Items")
 
            TXTtotalreg.Text = ds.Tables(0).Rows.Count
 
            Call FillGrid()
 
            Dim efectivosoles As Double
 
            For Each dr As DataRow In ds.Tables(0).Rows
                If Convert.ToString(dr(1)) = 1 Then efectivosoles += Convert.ToDouble(dr(2))
            Next
 
            TXTefectivo.Text = FormatNumber(efectivosoles, 2)
 
        Catch ex As Exception
            If Cn.State = ConnectionState.Open Then Cn.Close()
            MsgBox(ex.Message)
        End Try
------------------------------------------------------------------------------------------------------
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