C# 尝试格式化 datagridview 数据并在格式化后通过循环传回

C# Trying to format datagridview data and pass back through the loop once formatted

我正在尝试格式化我的 'Speed' 列,以便它在从文本文件收集数据的数据网格中显示为小数,但我没有运气。这是我要使用的代码:

while ((r.Peek() != -1))
{
    string timeS = "";
    string speedS = "";
    string delimeter = "\t";
    string[] Time1;
    allData = r.ReadLine();
    timeS = Dtime.ToString();
    Time1 = timeS.Split(' ');
    timeS = Time1[1];
    string[] rows = allData.Split("\r".ToArray());

    foreach (string row in rows)
    {
        var items = new List<string> { timeS };
        items.AddRange(row.Split(delimeter.ToArray()));
        dataset.Tables[tableName].Rows.Add(items.ToArray());
        speed = Convert.ToDouble(items[2]);
        speed = speed / 10;
        items[2] = speed.ToString();
        Dtime = Dtime.AddSeconds(inter);
    }

    this.dataGridView1.DataSource = dataset.Tables[0].DefaultView;
}

'speed' 正在收集正确的数据,但未在数据网格中正确显示,似乎只是被覆盖而不是转换所需的列。数据显示如下: 15:46:20 91 154 70 309 83 6451 .. 数据为“154”的列应显示为“15.4”。干杯!

您需要在将值放入 dataset

之前进行更改
foreach (string row in rows)
{
     var items = new List<string> { timeS };
     items.AddRange(row.Split(delimeter.ToArray()));
     speed = Convert.ToDouble(items[2]);
     speed = speed / 10;
     items[2] = speed.ToString();
     dataset.Tables[tableName].Rows.Add(items.ToArray());
     Dtime = Dtime.AddSeconds(inter);
}

ToArray 正在用您的 items 列表中的当前值创建一个新数组。然后您更改该列表中的值,这不会影响 dataset.

翻转这些行:

dataset.Tables[tableName].Rows.Add(items.ToArray());

speed = Convert.ToDouble(items[2]);
speed = speed / 10;
items[2] = speed.ToString();

这样您就可以在 数组 将其添加到 table:

之前更改 items 数组中的值
speed = Convert.ToDouble(items[2]);
speed = speed / 10;
items[2] = speed.ToString();

dataset.Tables[tableName].Rows.Add(items.ToArray());

Rows.Add() 方法调用内部 NewRecordFromArray 方法,该方法使用数组的各个元素在 DataTable 中构造新记录。当您更新数组时,它已经被使用,您更新的值将被忽略。

这是 NewRecordFromArray 中创建新记录的循环('value' 是数组):

for (int index = 0; index < value.Length; ++index)
{
    if (value[index] != null)
        this.columnCollection[index][record] = value[index];
    else
        this.columnCollection[index].Init(record);
}

此外,我认为 juharr 关于调用 ToArray() 的说法也是正确的,因此从技术上讲,有两件事会阻止您修改的值保存到新记录中。