CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 Buble Extraño

<< < (2/2)

senzao18:
MsgBox(aux, MsgBoxStyle.OkOnly)
'DataGridView1.Item(j + 1, i).Value = CType(aux, String)

Cuando comentas la segunda lienA TODO BIEN,
Y si no la comentas todo mal?
O solo sale mal el ultimo total?......


--- Código: Text --- If j = 4 Then Dim aux As Decimal = CType(DataGridView1.Item(j + 1, i).Value, Decimal) - CType((CType(DataGridView1.Item(j, i).Value, Decimal) / 100 * CType(DataGridView1.Item(j + 1, i).Value, Decimal)), Decimal) MsgBox(aux, MsgBoxStyle.OkOnly) DataGridView1.Item(j + 1, i).Value = CType(aux, String) End If  
DataGridView1.Item(j + 1, i).Value = CType(aux, String)<---Aqui metes algo, pero igual esa celda ya tiene un valor antes de...... ????

Si los indices estan bien, entonces ahora pasa a checar los valores que toma cuando haces algo como esto CType(DataGridView1.Item(j + 1, i).Value, Decimal). Y pues con la calculadora ahi sacs cuentas  :blink: .

Por que tu error si que esta raro. :(
Lamento no poder ayudar mas.  :whistling:

senzao18:
Tambien podrias hacer los calculos sobre el datasource....
Si tienes un origen de datos como un DataTable. Que es lo mas comun....

Podrias hacerlo los calculos ahi y las afectaciones a los DataRow o Registros, se te reflejaran en el control.

Y creo que este ciclo como que esta de mas

--- Código: Text --- While (j &#60; DataGridView1.Columns.Count)      If j = 4 Then           Dim aux As Decimal = CType(DataGridView1.Item(j + 1, i).Value, Decimal) - CType((CType(DataGridView1.Item(j, i).Value, Decimal) / 100 * CType(DataGridView1.Item(j + 1, i).Value, Decimal)), Decimal)             MsgBox(aux, MsgBoxStyle.OkOnly)            DataGridView1.Item(j + 1, i).Value = CType(aux, String)           End If      j += 1End While  
Para que barres las celdas??? Si ya sabes que siempre J sera 4 para que hagas el calculo pues mejor usa los numeros directamente, y solo barre los registros.


--- Código: Text ---           Dim aux As Decimal = CType(DataGridView1.Item(5, i).Value, Decimal) - CType((CType(DataGridView1.Item(4, i).Value, Decimal) / 100 * CType(DataGridView1.Item(5, i).Value, Decimal)), Decimal) DataGridView1.Item(5, i).Value = CType(aux, String)   
Otra cosa tambien tu formula como que no me deja tranquilo. No encuentro parentesis para indicar el orden en como se hace la operacion. jeje.

Y por ultimo yo usaria un FOR EACH para barrer el control, o el origen de datos.

franc:
Cuando comento esa linea, el msgbox imprime lo que tiene que imprimir ( 90 ) si no comento esa linea, empieza el buble y imprime 90 luego 81,3 etc etc.... hasta llegar a 0.000000005

inexplicable.


Por cierto, el bucle while parece inecesario, pero esque dentro de él hay 2 if`s mas que no he puesto porque no vienen al caso ( que por cierto, esos ifs hacenalgo parecido y si que van ), el problema está en ese if.

senzao18:
Es logico que si comentas esa linea el resultado saldra bien, pues no haces afectacion a las celdas, el problema es que has de estar afectando mal a las celdas y la operacion hace que te regrese ese eresultado, checa los valores con los quew haces la operacion en cada ciclo y ve si algun valor no esta afectandose mal.

Si asi lo deseas pasa el proyecto con el formulario en el cual tienes el error para ejecutarlo y asi poder verlo mas a detalle.

Si ya viene con un caso de prueba mejor jeje.

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa