2009-10-23 2 views
0

У меня этот метод, как я могу сделать десятичное число до .00, а не .0000?ASP.NET/C# Decimal до 0,00

public static List<Product> GetAllProducts() 
{ 
    List<Product> products = new List<Product>(); 
    string sqlQuery = "SELECT * FROM Products"; 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     using (SqlCommand command = new SqlCommand(sqlQuery, connection)) 
     { 
      connection.Open(); 

      using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection)) 
      { 
       while (reader.Read()) 
       { 
        Product product = new Product(); 
        product.Id = Convert.ToInt32(reader["Id"]); 
        product.ManufacturerId = Convert.ToInt32(reader["ManufacturerId"]); 
        product.CategoryId = Convert.ToInt32(reader["CategoryId"]); 
        product.Name = (reader["Name"]).ToString(); 
        product.Description = (reader["Description"]).ToString(); 
        product.Price = Convert.ToDecimal(reader["Price"]); 
        product.ItemsInStock = Convert.ToInt32(reader["ItemsInStock"]); 

        products.Add(product); 
       } 
      } 
     } 
    } 
    return products; 
} 

UPDATE: Извините за задавать глупые вопросы. я не могу видеть, куда положить DataFormatString = "{0: F2}"

Это моя сетка:

  <asp:TemplateField HeaderText="Price" SortExpression="Price"> 
       <EditItemTemplate> 
        <asp:TextBox ID="PriceTextBox" runat="server" Text='<%# Bind("Price") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:Label ID="PriceLabel" runat="server" Text='<%# Bind("Price") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 

ответ

4

Вы гаванью» t показано, где вы их показываете. Все, что у нас есть, это ячейка базы данных и объект в памяти, оба из которых являются просто хранилищем. В целях хранения .00 и .0000: То же самое. Попытка перевести от одного к другому является пустой тратой ресурсов. Покажите нам, где вы показываете это пользователю, и мы поможем вам отформатировать его, как вы хотите.

Кроме того, в качестве личных предпочтений, я бы написал, что такой код:

private static ToProduct(this IDataRecord record) 
{ 
    var product = new Product(); 
    product.Id = record.GetInt32(record.GetOrdinal("Id")); 
    product.ManufacturerId = record.GetInt32(record.GetOrdinal("ManufacturerId")); 
    product.CategoryId = record.GetInt32(record.GetOrdinal("CategoryId")); 
    product.Name = record.GetString(record.GetOrdinal("Name")); 
    product.Description = record.GetString(record.GetOrdinal("Description")); 
    product.Price = record.GetDecimal(record.GetOrdinal("Price")); 
    product.ItemsInStokc = record.GetInt32(record.GetOrdinal("ItemsInStock")); 
    return product; 
} 

public static IEnumerable<Product> GetAllProducts() 
{ 
    string sqlQuery = "SELECT * FROM Products"; 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    using (SqlCommand command = new SqlCommand(sqlQuery, connection)) 
    { 
     connection.Open(); 

     using (SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection)) 
     { 
      while (reader.Read()) 
      { 
       yield return reader.ToProduct(); 
      } 
     } 
    } 
} 

Update:
Вы отметили, что это будет в GridView. Хорошо. В этом случае, все, что вам нужно сделать, это иметь в определении столбца в DataFormatString, как это:

<asp:GridView runat="server" id="TestView" ... > 
    <Columns> 
     <asp:BoundField DataFormatString="{0:F2}" /> 
     ... 
    </Columns> 
</asp:GridView>  
+0

Как и в сторону, это демонстрирует один из немногих вещей, которые мне нравятся больше о Visual Basic. Представьте себе, что это последний метод в последнем классе в пространстве имен. В конце файла будет 6 вложенных закрывающих скобок (}). VB становится намного легче читать. –

+0

Извините, я печатаю это в GridView. Я не могу использовать product.Price = Convert.ToDecimal (читатель [«Цена»]. ToString («0.00»)); потому что он ожидает целое число – user83713

+0

Но я попробую ваше решение – user83713

0

Ну, очевидно, вы не могли сделать следующее

product.Price = Convert.ToDecimal(reader["Price"]).ToString("0.00"); 

, как это будет возвращать строку , Хотя вы можете сделать это:

product.Price = Convert.ToDecimal(reader["Price"].ToString("0.00")); 

Это может показаться наиболее логичным способом для завершения этой операции.

1

При печати Product.Price используйте .ToString ("N2"). Вам может понадобиться выражение полной валюты, которое является .ToString («C»). Вот ссылка ссылка для всех строк в формате:

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

 Смежные вопросы

  • Нет связанных вопросов^_^