ASP.NET/C# Десятичное число до 0,00 - PullRequest
0 голосов
/ 23 октября 2009

Я получил этот метод, как я могу сделать десятичное число до .00, а не .0000?

    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>

Ответы [ 5 ]

5 голосов
/ 23 октября 2009

1234m.ToString ( "0,00")

4 голосов
/ 23 октября 2009

Вы не показали, где вы их отображаете. Все, что у нас есть, это ячейка базы данных и объект в памяти, оба из которых являются просто хранилищем. Для целей хранения .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();
            }
        }
    }
}

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

<asp:GridView runat="server" id="TestView" ... >
    <Columns>
        <asp:BoundField DataFormatString="{0:F2}"  />
        ...
    </Columns>
</asp:GridView>    
1 голос
/ 23 октября 2009

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

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

0 голосов
/ 23 октября 2009

Вы беспокоитесь о настройках культуры?

Проверьте эту ссылку MSDN: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

Надеюсь, вам стоит помочь.

0 голосов
/ 23 октября 2009

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

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

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

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

Казалось бы, самый логичный способ выполнить эту операцию.

...