Domanda

Ho ottenuto questo metodo, come posso fare il decimale a .00 e non a .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: Scusa per aver fatto domande stupide. Non riesco a vedere dove inserire DataFormatString = " {0: F2} "

Questa è la mia griglia:

            <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>
È stato utile?

Soluzione

Non hai mostrato dove li stai visualizzando. Tutto ciò che abbiamo è una cella di database e un oggetto in memoria, che sono entrambi semplicemente archiviazione. Ai fini della memorizzazione, .00 e .0000 sono la stessa cosa. Cercare di tradurre dall'uno all'altro è uno spreco di risorse. Mostraci dove lo mostri all'utente e ti aiuteremo a formattarlo come preferisci.

Inoltre, come preferenza personale scrivo quel codice in questo modo:

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();
            }
        }
    }
}

Aggiornamento:
Hai commentato che questo sarà in un GridView. Va bene. In tal caso, tutto ciò che devi fare è avere un DataFormatString nella definizione della colonna, in questo modo:

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

Altri suggerimenti

1234m.ToString (" 0,00 ")

Quando si stampa Product.Price, utilizzare .ToString (" N2 "). Quello che potresti desiderare è l'espressione di valuta completa, che è .ToString (" C "). Ecco un link di riferimento per tutte le stringhe di formato:

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

Beh, ovviamente non puoi fare quanto segue

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

in quanto restituirebbe una stringa. Anche se potresti essere capace di farlo:

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

Questo sembrerebbe il modo più logico per completare questa operazione.

Sei preoccupato per le impostazioni della cultura?

Dai un'occhiata a questo link msdn: http://msdn.microsoft.com/en-us/library/dwhawy9k. aspx

Spero di darti una mano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top