Lunes 23 de Diciembre de 2024, 04:46
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
VB .NET
(Moderador:
ElNapster
) »
Buble Extraño
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Buble Extraño (Leído 1999 veces)
franc
Miembro MUY activo
Mensajes: 157
Buble Extraño
«
en:
Martes 25 de Julio de 2006, 18:08 »
0
Hola, tengo un datagrid con 6 columnas y las filas se rellenan segun la elección de un combobox. Mi problema es que cuando recorro el contenido del datagrid mediante un doble bucle:
Código: Text
While (i < DataGridView1.Rows.Count)
Dim j As Integer = 0
While (j < DataGridView1.Columns.Count)
( codigo ...... )
j += 1
End While
i += 1
End While
distingo en que columna estamos mediante el siguiente if, veo que estamos en la culmna 4 y con ello quiero hacer unos calculos ( concretamente esta columna es la de "descuento" y lo que hago es calcular el TOTAL ( columna siguiente ) sobre una cantidad ( columna anterior ) y sobre el decuento ( columna actual ) )
Bueno en definitiva, cuando hago este calculo y asigno a la siguiente columna ( el total ) el valor actualizado con el descuento... resulta que hay un "bucle" muy raro que no se porque lo hace.
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
Suponiendo que las cantidades que coge el datagrid fueran:
precio unitario···········descuento············total
______100__________10_____________0______
El if anterior hace que donde pone un 0 deberia poner un 90 ( por el descuento )
y lo que realmente pone es 0.0000000000000005
Imprimiendo las cantidades con el MsgBox que veis en el codigo anterior, veo que primero muestra 90,0 ( valor correcto ) luego 81,0 luego 72,900 luego 65,6100 etc... hasta llegar a 0.00000000000000005
he intentado hacer un exit sub pero realmente el programa no pasa de la asignacion... sino que este buble se hace en la misma asignacion.
¿ Alguien sabe que está pasando aquí ?
Gracias
Tweet
senzao18
Miembro HIPER activo
Mensajes: 553
Re: Buble Extraño
«
Respuesta #1 en:
Martes 25 de Julio de 2006, 18:58 »
0
Segun yo, tu codigo no tiene problemas los bucles estan bien, creo que tienes que hacer un debug para ver el contenido no los index. Asi sabras si no te esta tomando alguna linea de mas.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo
-->
franc
Miembro MUY activo
Mensajes: 157
Re: Buble Extraño
«
Respuesta #2 en:
Martes 25 de Julio de 2006, 19:31 »
0
Hola, gracias por tu respuesta.
Ya sabia que no tenia problemas en los bucles, de hecho el problema está en la ultima asginacion
Código: Text
MsgBox(aux, MsgBoxStyle.OkOnly)
DataGridView1.Item(j + 1, i).Value = CType(aux, String)
que no para de ir de una linea a otra ( de la asignacion al msgbox ) es algo muy estraño y no entiendo porqué
De hecho, si comento la linea de la asignación
Código: Text
MsgBox(aux, MsgBoxStyle.OkOnly)
'DataGridView1.Item(j + 1, i).Value = CType(aux, String)
el MsgBox imprime 90 ( lo correcto ) y no se hace el bucle "extraño" osea que el problema está en esa linea y no se en qué.
senzao18
Miembro HIPER activo
Mensajes: 553
Re: Buble Extraño
«
Respuesta #3 en:
Martes 25 de Julio de 2006, 20:38 »
0
Pues yo insisto enque hagas debug y veas los indices jeej
.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo
-->
franc
Miembro MUY activo
Mensajes: 157
Re: Buble Extraño
«
Respuesta #4 en:
Martes 25 de Julio de 2006, 20:55 »
0
los indices están bien, no avanzan a pesar del "blucle no deseado... y a a par extraño"
senzao18
Miembro HIPER activo
Mensajes: 553
Re: Buble Extraño
«
Respuesta #5 en:
Jueves 27 de Julio de 2006, 07:05 »
0
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
.
Por que tu error si que esta raro.
Lamento no poder ayudar mas.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo
-->
senzao18
Miembro HIPER activo
Mensajes: 553
Re: Buble Extraño
«
Respuesta #6 en:
Jueves 27 de Julio de 2006, 07:16 »
0
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 < 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 += 1
End 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.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo
-->
franc
Miembro MUY activo
Mensajes: 157
Re: Buble Extraño
«
Respuesta #7 en:
Jueves 27 de Julio de 2006, 18:04 »
0
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
Miembro HIPER activo
Mensajes: 553
Re: Buble Extraño
«
Respuesta #8 en:
Viernes 28 de Julio de 2006, 07:26 »
0
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.
---------------------------------------
Erick Aragon Zepeda
Dessarrollo de Aplicaciones .NET
http]
Blog de Articulos
Mi Blog
NoSolocodigo
-->
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
VB .NET
(Moderador:
ElNapster
) »
Buble Extraño