1

2つの10進値を追加して、新しいデータ列に保存しようとしています。しかし、私はそれをどうやってやるべきかではないことに気づきました。どこが間違っているのか教えてください。ありがとうございました!これは、Visual Studio 2005でc#を使用しています。

 Dataset ds = new DataSet();
 DataColumn newColumn2;
 newColumn2 = new DataColumn("TotalAmount");
 decimal TotalAmountSold = 0;
 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
 {
     TotalAmountSold = Convert.ToDecimal(ds.Tables[0].Rows[i]["AmountSold"]) + Convert.ToDecimal(ds.Tables[0].Rows[i]["AmountUpgraded"]);
 }
 TotalAmountSold = Math.Round(Convert.ToDecimal(TotalAmountSold.ToString()), 2);
 newColumn2.Expression = TotalAmountSold.ToString();
 ds.Tables[0].Columns.Add(newColumn2);
4

2 に答える 2

4

MSDNの例を見てください。基本的には、列を作成し、数式を指定してから、その列をDataTableに追加します。あなたは次のようなものになってしまうでしょう

// Create total column.
DataColumn totalColumn = new DataColumn();
totalColumn.DataType = System.Type.GetType("System.Decimal");
totalColumn.ColumnName = "total";
totalColumn.Expression = "AmountSold + AmountUpgraded";

// Add columns to DataTable.
...
table.Columns.Add(totalColumn);

計算されるすべての行を手動でループする必要はありません。

于 2012-08-03T19:27:41.740 に答える
0

ただ学ぶ?いくつかのアドバイス:

  1. Visual Studio 2005を廃止します。Microsoftは、最新のVisual Studioの、限定的ではありますが無料のバージョンを提供しています。主な理由は、VS2005が非常に安っぽいからです。
  2. マイクロソフトのオンラインドキュメントを見つけて使用します。
  3. より良い例を入手してください。データベースからのデータのフェッチという重要な部分が欠落しています。Googleの「C#DataAdapterクラス」。
  4. 10進数への変換はおそらく不要です。データベースは数値を数値データ型として格納していると思います。さらに、このデータを受け取るDataTableには、データ型を10進数として指定する特定の列があると想定しています。

つまり、表示するコードをクリーンアップする方法は次のとおりです。

    DataColumn newColumn2 = new DataColumn( "TotalAmount"、typeof(decimal));
    10進数のTotalAmountSold=0;

    foreach(DataRow theRow in ds.Tables [0] .Rows){
        TotalAmountSold + = theRow ['AmountSold "] + theRow ["AmountUpgraded "];
    }
  1. 型をとるDataColumnコンストラクター。これで、追加中に何も変換する必要がなくなりました。これは、追加される列も10進数であると想定しています。
  2. foreachは、forループよりもクリーンで表現力豊かです
  3. + =またはTotalAmountSold、追加するすべての行に対して上書きされます。
于 2012-08-03T19:54:37.093 に答える