ASP.NET/C# Dezimal auf 0,00
Frage
Ich habe diese Methode, wie kann ich die Dezimalstelle auf .00 und nicht 0,0000?
machen 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: Sorry für dumme Fragen zu stellen. Ich kann nicht sehen, wo die Dataformatstring setzen = "{0: F2}"
Das ist mein Raster:
<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>
Lösung
Sie haben nicht gezeigt, wo Sie diese Anzeige. Alles, was wir haben, ist eine Datenbankzelle und ein Objekt im Speicher, sind beide von denen lediglich der Lagerung. Zur Lagerung, .00
und .0000
sind das gleiche. von einem zum anderen übersetzen Der Versuch, eine Verschwendung von Ressourcen ist. Zeigen Sie uns, wo Sie diese Anzeige für den Benutzer, und wir werden Ihnen helfen, es zu formatieren, wie Sie wollen.
Auch als persönliche Präferenz ich diesen Code wie folgt schreiben würde:
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:
Sie bemerken, dass dies in einem Gridview sein wird. Okay. In diesem Fall alles, was Sie tun müssen, ist eine DataFormatString
in der Spaltendefinition hat, wie folgt:
<asp:GridView runat="server" id="TestView" ... >
<Columns>
<asp:BoundField DataFormatString="{0:F2}" />
...
</Columns>
</asp:GridView>
Andere Tipps
1234m.ToString ( "0.00")
Wenn Product.Price drucken, verwenden Sie .ToString ( "N2"). Was möchten Sie vielleicht ist die volle Währung Ausdruck, der wird .ToString ( „C“). Hier ist ein Referenz-Link für alle Formatstrings:
Nun könnte man natürlich nicht tun das folgende
product.Price = Convert.ToDecimal(reader["Price"]).ToString("0.00");
, da es eine Zeichenfolge zurückgeben würde. Obwohl Sie können dies tun beable:
product.Price = Convert.ToDecimal(reader["Price"].ToString("0.00"));
Dies scheint den logischste Weg, um diesen Vorgang abzuschließen.
Sind Sie besorgt über Kultureinstellungen?
Sehen Sie sich diesen Msdn Link: http://msdn.microsoft.com/en-us/library/dwhawy9k. aspx
Sollten Sie hoffentlich geben eine Hand.