SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: jotae en Domingo 20 de Febrero de 2011, 16:58

Título: Un caso con int.Parse
Publicado por: jotae en Domingo 20 de Febrero de 2011, 16:58
Mi codigo: (Visual Studio C# 2010) Access DB

Código: C#
  1.  
  2. private void tbPagos_Click(object sender, EventArgs e)
  3. {
  4.   iPosact = dgView.CurrentRow.Index;
  5.   pId = tc.Rows[iPosact]["id"].ToString();
  6.   pNombre = tc.Rows[iPosact]["nombre"].ToString();
  7.   int pSaldo = int.Parse(tc.Rows[iPosact]["saldo"].ToString()); //error en esta línea.
  8.   if (pSaldo == 0)
  9.     {
  10.      res = MessageBox.Show("No tiene saldos pendientes. ¿Desea anular un pago?", "Anular Pago", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
  11.      if (res == DialogResult.No)
  12.         {
  13.           cargarDataGrid();
  14.           return;
  15.         }
  16.         Form pagos = new pagos();
  17.         pagos.ShowDialog();
  18.    }
  19.  }
  20.  

El problema:

saldo es un campo numérico en la tabla. Si pSaldo es > 0, todo anda bien pero si el valor de pSaldo es 0 (cero), genera este error:

No se controló FormatException
La cadena de entrada no tiene el formato correcto.
Título: Re: Un caso con int.Parse
Publicado por: gabio2 en Lunes 21 de Febrero de 2011, 04:13
Para empezar el int.Parse() NO funciona si tu decimal no es entero, es decir, antes de convertir tienes que redondearlo  puedes usar el Math.Round() para hacer eso, otro error típico, es cuando tu "saldo" es null, estás 100% seguro que te regresa algún valor?.. checalo guardando el valor en una variable de tipo Object y con tus puntos de interrupción.. ejemplo:

Código: C#
  1.  
  2. Object _obj = tc.Rows[iPosact]["saldo"]; //No estoy seguro pero creo que debe tener una propiedad .Value, ejemplo: tc.Rows[iPosact]["saldo"].Value checalo..
  3.  
  4.  

saludos espero te haya servido.. te recomiendo leer este link http://msdn.microsoft.com/es-es/library ... 95%29.aspx (http://msdn.microsoft.com/es-es/library/f56zcx39%28VS.95%29.aspx" onclick="window.open(this.href);return false;)
Título: Re: Un caso con int.Parse
Publicado por: jotae en Lunes 21 de Febrero de 2011, 04:41
Gracias. De acuerdo a esto me puse a investigar y efectivamente el campo saldo en una tabla Access estaba definido como MONEY. Lo cambié a NUMBER y... voilá. Todo OK. Gracias gabio.  :good: