2011-06-28 14 views
0

私のasp.net 3.5 eコマースアプリでは、製品カタログ管理領域に製品表を編集するためのgridviewがあります。ウェイトフィールドは10進数で、10進数には更新されませんが、最も近い整数に丸められます。私の製品カタログ(10進数)は10進数に更新されません

 string weight = ((TextBox)grid.Rows[e.RowIndex].FindControl("weightTextBox")).Text; 


    // Update an existing product 
public static bool UpdateProduct(string productId, string name, string description, string weight, string price, string Thumbnail, string Image, string Inventory, string PromoFront, string Rank) 
{ 
    // get a configured DbCommand object 
    DbCommand comm = GenericDataAccess.CreateCommand(); 
    // set the stored procedure name 
    comm.CommandText = "CatalogUpdateProduct"; 
    .... 
    //create a new parameter 
    param = comm.CreateParameter(); 
    param.ParameterName = "@Weight"; 
    param.Value = weight; 
    param.DbType = DbType.Decimal; 
    comm.Parameters.Add(param); 
    .... 
    // result will represent the number of changed rows 
    int result = -1; 
    try 
    { 
     // execute the stored procedure 
     result = GenericDataAccess.ExecuteNonQuery(comm); 
    } 
    catch 
    { 
     // any errors are logged in GenericDataAccess, we ignore them here 
    } 
    // result will be 1 in case of success 
    return (result != -1); 
} 

答えて

1

体重がdecimalある場合は、なぜあなたのUpdateメソッドはstringとして重みを受け入れていますか?これは、あなたのコードに制約を強制していないので、問題を求めているだけです。

特定のデータ型が必要なようにメソッドのシグネチャを変更し、UpdateProductを呼び出す前にキャストを実行します。何かがあれば、テスト/保守がはるかに簡単になります。あなたはどうしたらあなたの場合

decimal weight = 
Decimal.Parse((TextBox)grid.Rows[e.RowIndex].FindControl("weightTextBox")).Text); 
+0

グッドポイント。私はあなたのキャスティングと喜びを試みた。しかし、私をベストプラクティスに導いてくれてありがとう。文全体を囲む余分な括弧を挿入しました。小数点以下桁数= Decimal.Parse(((TextBox)grid.Rows [e.RowIndex] .FindControl( "weightTextBox"))。 –