DataGrid在编辑money型时显示两位小数用方法: DataFormatString="{0:C}",但是money型在SQL SERVER 2000中是四位小数,这样update之后就有问题了。
请问:在编辑时显示两位小数,update提交后能转换为四位小数,达到更新的目的?

解决方案 »

  1.   

    因为SQL SERVER数据库表(如Northwind中Products表)中,money型默认就是4位小数。而在编辑DataGrid时,我显示的只是2位小数,但是按2位小数更新就会出错。
      

  2.   

    用这个方法DataFormatString="{0:C}"显示2位小数之后 ,像值 18.0000 就会显示为 ¥18.00 ,要是按值 ¥20.00 更新,是无法更新的。对UnitPrice字段的值进行更新
    以下是我的代码:<%@ Import Namespace="System.Data.SqlClient"%>
    <%@ Import Namespace="System.Data" %>
    <%@ Page language="c#" Codebehind="WebForm4.aspx.cs" Inherits="WebApplication2.WebForm4" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm4</title>
    <script language="C#" runat="server">
    private string sSqlCon= "server=localhost;uid=sa;pwd=sql;database=Northwind";public void Page_Load(Object sender,EventArgs e)
    {
    if (!IsPostBack)
    {
    Bind();
    }
    }private void Bind()
    {
    SqlConnection SqlCon=new SqlConnection(sSqlCon);
    StringBuilder SqlCmd=new StringBuilder();
    SqlCmd.Append("select ProductName,UnitPrice,");
    SqlCmd.Append("UnitsInStock,UnitsOnOrder,");
    SqlCmd.Append("ProductID from Products");
    SqlDataAdapter sda=new SqlDataAdapter (SqlCmd.ToString(),SqlCon);
    DataSet ds = new DataSet();
    sda.Fill(ds,"P");
    DGProducts.DataSource=ds.Tables["P"].DefaultView;
    DGProducts.DataBind();
    }public void DGProducts_Edit(Object sender,DataGridCommandEventArgs e)
    {
    DGProducts.EditItemIndex=e.Item.ItemIndex;
    Bind();
    }public void DGProducts_Cancel(Object sender,DataGridCommandEventArgs e)
    {
    DGProducts.EditItemIndex= -1;
    Bind();
    }public void DGProducts_Update(Object sender,DataGridCommandEventArgs e)
    {
    string sProductName,sUnitsInStock,sUnitsOnOrder,sProductID,sUnitPrice;
    sProductName= ((TextBox)e.Item.Cells[1].Controls[0]).Text;
    sUnitsInStock= ((TextBox)e.Item.Cells[2].Controls[0]).Text;
    sUnitsOnOrder= ((TextBox)e.Item.Cells[3].Controls[0]).Text;
    sUnitPrice= ((TextBox)e.Item.Cells[4].Controls[0]).Text;
    sProductID= e.Item.Cells[5].Text;StringBuilder sSqlCmd= new StringBuilder();
    sSqlCmd.Append("update Products ");
    sSqlCmd.Append("set ProductName= @ProductName,");
    sSqlCmd.Append("UnitsInStock= @UnitsInStock,");
    sSqlCmd.Append("UnitsOnOrder= @UnitsOnOrder, ");
    sSqlCmd.Append("UnitPrice= @UnitPrice ");
    sSqlCmd.Append("where ProductID= @ProductID");SqlConnection SqlCon= new SqlConnection(sSqlCon);
    SqlCommand SqlCmd= new SqlCommand(sSqlCmd.ToString(),SqlCon);
    SqlCmd.Parameters.Add( new SqlParameter("@ProductName",SqlDbType.NVarChar,40));
    SqlCmd.Parameters["@ProductName"].Value= sProductName;
    SqlCmd.Parameters.Add( new SqlParameter("@UnitsInStock",SqlDbType.SmallInt));
    SqlCmd.Parameters["@UnitsInStock"].Value=sUnitsInStock;
    SqlCmd.Parameters.Add( new SqlParameter("@UnitsOnOrder",SqlDbType.SmallInt));
    SqlCmd.Parameters["@UnitsOnOrder"].Value=sUnitsOnOrder;
    SqlCmd.Parameters.Add ( new SqlParameter("@UnitPrice",SqlDbType.Money));
    SqlCmd.Parameters["@UnitPrice"].Value= sUnitPrice;
    SqlCmd.Parameters.Add (new SqlParameter("@ProductID",SqlDbType.SmallInt));
    SqlCmd.Parameters["@ProductID"].Value=sProductID;SqlCon.Open();
    SqlCmd.ExecuteNonQuery();
    SqlCon.Close();DGProducts.EditItemIndex= -1;
    Bind();} </script>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <style rel="stylesheet">H3 {
    FONT: bold 11pt Verdana,Arial,sans-serif
    }
    .products {
    FONT: 9pt Verdana,Arial,sans-serif
    }
    .productsHead {
    FONT: bold 9pt Verdana,Arial,sans-serif; COLOR: white; BACKGROUND-COLOR: maroon
    }
    A {
    TEXT-DECORATION: none
    }
    A:hover {
    COLOR: maroon; TEXT-DECORATION: underline
    }
    </style>
    </HEAD>
    <body>
    <form runat="server">
    <h3>Northwind Inventory Management - VisualBasic.NET</h3>
    <asp:datagrid id="DGProducts" runat="server" OnUpdateCommand="DGProducts_Update" OnCancelCommand="DGProducts_Cancel"
    OnEditCommand="DGProducts_Edit" AutoGenerateColumns="False" Font-Size="12pt" HeaderStyle-CssClass="productsHead"
    AlternatingItemStyle-BackColor="Tan" GridLines="None" BorderWidth="1px" Width="750px" CellPadding="4">
    <AlternatingItemStyle BackColor="Tan"></AlternatingItemStyle>
    <HeaderStyle CssClass="productsHead"></HeaderStyle>
    <Columns>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑" ></asp:EditCommandColumn>
    <asp:BoundColumn DataField="ProductName" HeaderText="Product Name"></asp:BoundColumn>
    <asp:BoundColumn DataField="UnitsInStock" HeaderText="Units in Stock"></asp:BoundColumn>
    <asp:BoundColumn DataField="UnitsOnOrder" HeaderText="Units On Order"></asp:BoundColumn>
    <asp:BoundColumn DataField="UnitPrice" HeaderText="Price Per Unit" DataFormatString="{0:C}"></asp:BoundColumn>
    <asp:BoundColumn DataField="ProductID" ReadOnly="True" HeaderText="Product ID"></asp:BoundColumn>
    </Columns>
    </asp:datagrid></form>
    </body>
    </HTML>