从DataTable

时间:2017-08-01 13:23:11

标签: c# datatable

我有一个包含多个列的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?

想法(不工作):

  1. 取自here

        foreach (DataRow row in csvData.Rows)
        {
            foreach (DataColumn column in csvData.Columns[0])
            {
                row.SetField(column, column * 100000);
            }
        }
    
  2. 错误:

    csvData.Columns [0]) - foreach语句不能对'System.Data.DataColumn'类型的变量进行操作,因为'System.Data.DataColumn'不包含'GetEnumerator

    的公共定义

    栏* 100000); - Operator *不能应用于'DataColumn'和'int'

    类型的操作数

2 个答案:

答案 0 :(得分:1)

在问题的评论中使用@ChetanRanpariya提供的想法,我能够像这样解决我的问题:

    foreach (DataRow row in csvData.Rows)
    {
        row.SetField(0, Convert.ToDouble(row[0]) * 100000);
    }

旁注:我从“Convert.ToInt32”更改为“Conver.ToDouble”,因为我的列包含带点的数字。

答案 1 :(得分:0)

由于您只更改了一列的值,因此只需要一个foreach循环(循环遍历行)。

您所要做的就是遍历行,读取列的值,然后重写。

foreach (DataRow row in csvdata.Rows) {
    row.SetField(0, row.Field(0) * 1000000);
}