C# 如何添加2个十进制值并将其添加到数据集的新列中?

C# 如何添加2个十进制值并将其添加到数据集的新列中?,c#,.net,C#,.net,我正在尝试添加2个十进制值并将其保存到新的datacolumn。但我意识到我不应该这样做。我哪里想错了,请告诉我。非常感谢。这是在VisualStudio2005中使用c Dataset ds = new DataSet(); DataColumn newColumn2; newColumn2 = new DataColumn("TotalAmount"); decimal TotalAmountSold = 0; for (int i = 0; i < ds.Tables[0]

我正在尝试添加2个十进制值并将其保存到新的datacolumn。但我意识到我不应该这样做。我哪里想错了,请告诉我。非常感谢。这是在VisualStudio2005中使用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);

看看上面的例子。基本上,您需要创建一列,指定公式,然后将该列添加到数据表中。你最终会得到这样的结果

// 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);

您不需要手动循环所有行,这些行将为您计算。

请查看上的示例。基本上,您需要创建一列,指定公式,然后将该列添加到数据表中。你最终会得到这样的结果

// 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);

您不需要手动循环所有行,这些行将为您计算。

只是学习?有些人建议:

摆脱VisualStudio2005。微软提供了其最新Visual Studio的免费(尽管有限)版本。主要是因为VS2005太糟糕了。 查找并使用microsoft联机文档。 举个更好的例子。您缺少一个重要的部分—从数据库中获取数据。GoogleC数据适配器类。 转换为十进制可能是不必要的。我假设数据库将数字存储为数字数据类型。我进一步假设接收此数据的DataTable具有指定其数据类型为decimal的特定列。 也就是说,以下是您显示的代码可以清理的方式:

DataColumn newColumn2 = new DataColumn("TotalAmount", typeof(decimal)); decimal TotalAmountSold = 0; foreach(DataRow theRow in ds.Tables[0].Rows) { TotalAmountSold += theRow['AmountSold"] + theRow["AmountUpgraded"]; } 采用类型的DataColumn构造函数。现在我们不必在加法过程中转换任何内容。这假定要添加的列也是十进制的。 与for循环相比,foreach更干净、更具表现力 +=或者,对于我们要添加的每一行,TotalAmountSelled都会被重写。
只是学习?有些人建议:

摆脱VisualStudio2005。微软提供了其最新Visual Studio的免费(尽管有限)版本。主要是因为VS2005太糟糕了。 查找并使用microsoft联机文档。 举个更好的例子。您缺少一个重要的部分—从数据库中获取数据。GoogleC数据适配器类。 转换为十进制可能是不必要的。我假设数据库将数字存储为数字数据类型。我进一步假设接收此数据的DataTable具有指定其数据类型为decimal的特定列。 也就是说,以下是您显示的代码可以清理的方式:

DataColumn newColumn2 = new DataColumn("TotalAmount", typeof(decimal)); decimal TotalAmountSold = 0; foreach(DataRow theRow in ds.Tables[0].Rows) { TotalAmountSold += theRow['AmountSold"] + theRow["AmountUpgraded"]; } 采用类型的DataColumn构造函数。现在我们不必在加法过程中转换任何内容。这假定要添加的列也是十进制的。 与for循环相比,foreach更干净、更具表现力 +=或者,对于我们要添加的每一行,TotalAmountSelled都会被重写。
您是否使用sql代码返回数据并填充数据集?您可以在sql查询中执行此操作。在C语言中,您可能需要创建具有额外列的新数据表,并循环原始数据,并将具有计算列的行添加到新数据表。@rs。是的,我正在使用SQl,但存储过程对我来说太复杂了,所以我想我应该试着用c语言加起来。在sql中,你只需要做CastAmountSell作为小数10,2+CastAmount升级为小数10,2,因为TotalAmountSoldORM代表对象关系映射器。NET中最流行的两个是NHibernat和实体框架。有一个NHibernate入门指南和一个多ipart指南。多部分指南以WPF应用程序为例,但许多概念将应用于其他类型的项目。那里有很多东西要学,所以我想说,挑一个,开始阅读和实验。祝您好运。您是否使用sql代码返回数据并填充数据集?您可以在sql查询中执行此操作。在C语言中,您可能需要创建具有额外列的新数据表,并循环原始数据,并将具有计算列的行添加到新数据表。@rs。是的,我正在使用SQl,但存储过程对我来说太复杂了,所以我想我应该试着用c语言加起来。在sql中,你只需要做CastAmountSell作为小数10,2+CastAmount升级为小数10,2,因为TotalAmountSoldORM代表对象关系映射器。NET中最流行的两个是NHibernat和实体框架。有一个NHibernate入门指南和一个多ipart指南。多部分指南以WPF应用程序为例,但许多概念将应用于其他类型的项目。那里有很多东西要学,所以我想说,挑一个,开始阅读和实验。祝你好运。这正是我想要的!我不确定是否要将数据类型设置为column。这太完美了!非常感谢。很高兴我能帮忙;然而,当您在google DataTable formula列中搜索时,文档页面实际上是第一个结果。你真的应该花点时间看看MSDN,那里有很多很好的例子。如果你不理解其中的一些,你可以在这里要求解释。这种情况更有可能发生
得出的答案在更广泛的情况下会有所帮助。当然,我会研究你给我的建议。谢谢:-这正是我想要的!我不确定是否要将数据类型设置为column。这太完美了!非常感谢。很高兴我能帮忙;然而,当您在google DataTable formula列中搜索时,文档页面实际上是第一个结果。你真的应该花点时间看看MSDN,那里有很多很好的例子。如果你不理解其中的一些,你可以在这里要求解释。这更有可能产生在更广泛的情况下有用的答案。当然,我会研究你给我的建议。谢谢:-对VS 2005的理解很好,在问题中我甚至没有注意到这一点。除非您使用的是类型化数据集,否则从以下[…]中产生的任何内容都将是对象,您必须先对其进行强制转换,然后才能对其执行数学运算。VS 2005上的好理解,在问题中甚至没有注意到这一点。除非您使用的是类型化数据集,否则从下面[…]中产生的任何内容都将是对象,您必须先将其强制转换,然后才能对其执行数学操作。