2012-02-01 30 views
7

Tengo un lector de datos para leer los datos de la base de datos. Estoy leyendo TotalPrice en la tabla de ventas. Me gustaría mostrar el precio total como 2 decimales.sin sobrecarga para el método "ToString" toma 1 argumentos

El código es algo que enlace:

TotalPrice.Text = myReader["TotalPrice"].ToString("N2"); 

Sin embargo i encounted este error: no hay sobrecarga para el método "ToString" toma 1 argumentos ¿Qué pasa con el código?

+0

¿Qué tipo es la columna TotalPrice? –

+0

umm, numérico (18, 5) – user1125911

Respuesta

12

Suponiendo que TotalPrice es una columna decimal, y que myReader es un DataReader:

TotalPrice.Text = myReader.GetDecimal(myReader.GetOrdinal("TotalPrice")).ToString("N2"); 

La idea aquí es que indexador de myReader (lo que está utilizando cuando se llama myReader["TotalPrice"]) devuelve un objeto. Tiene que hacerlo, ya que no sabe en tiempo de compilación qué tipo es la columna. Al usar .GetDecimal(), está garantizando que recuperará un valor decimal o un error.

La sobrecarga .ToString que toma una cadena de formato se declara en Decimal, no en Objeto. Objetos . ToString no tiene argumentos.

La llamada interna a GetOrdinal devuelve el índice del campo dado el nombre; si está haciendo esto en un bucle para filas de datos múltiples, probablemente desee almacenarlo en una variable.

8

String.Format() hará el truco. F2 es la notación de punto fijo con 2 decimales.

TotalPrice.Text = string.Format("{0:F2}", (double)myReader["TotalPrice"]); 
Cuestiones relacionadas