【发布时间】:2017-08-01 13:23:10
【问题描述】:
我有一个包含几列的 DataTable。我只需要将整列 0 乘以一个常数值。就我而言,我正在将此列从 Giga (10^9) 转换为 Kilo (10^3)。换句话说,
- 我需要将第 0 列中的每个值乘以 10^6。
(我想更改一个特定列中的所有行。)
我有什么:
// change the freq. unit (from Giga (10^9) to Kilo(10^3))
foreach (DataRow row in csvData.Rows)
{
row.SetField(0, 9999);
}
如您所见,在这种情况下,我只是将索引为 0 的列中的所有内容设置为“9999”。如何更改以获取列的值,然后乘以 10^6?
想法(不工作):
-
取自here:
foreach (DataRow row in csvData.Rows) { foreach (DataColumn column in csvData.Columns[0]) { row.SetField(column, column * 100000); } }
错误:
csvData.Columns[0]) - foreach 语句无法对“System.Data.DataColumn”类型的变量进行操作,因为“System.Data.DataColumn”不包含“GetEnumerator”的公共定义
和
列 * 100000); - 运算符 * 不能应用于“DataColumn”和“int”类型的操作数
【问题讨论】:
-
csvData.Columns[0]表示数据表的第一列。您不能将其用作 foreach 循环中的集合。您想更改特定列的值或多个列? -
尝试以下操作:foreach(DataRow row in csvData.AsEnumerable()) { row.SetField
(0, row.Field (0) * 1000); } -
@ChetanRanpariya,我想更改一个特定列中的所有行。
-
所以假设你想将第一列的值乘以 100000 那么你应该删除内部 foreach 循环并写
row.SetField(0, Convert.ToInt32(row[0]) * 100000); -
嘿@jdweng,如果我这样尝试,我会收到错误“System.Data.DataSetExtensions.dll 中发生'System.InvalidCastException' 类型的未处理异常”