【问题标题】:C# Trying to format datagridview data and pass back through the loop once formattedC#尝试格式化datagridview数据并在格式化后通过循环返回
【发布时间】:2015-04-30 13:06:25
【问题描述】:

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

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;
}

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

【问题讨论】:

    标签: c# arrays for-loop datagridview converter


    【解决方案1】:

    您需要在将值放入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

    【讨论】:

      【解决方案2】:

      翻转这些线:

      dataset.Tables[tableName].Rows.Add(items.ToArray());
      
      speed = Convert.ToDouble(items[2]);
      speed = speed / 10;
      items[2] = speed.ToString();
      

      所以您要更改 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() 的调用也是正确的,所以从技术上讲,有两件事会阻止您修改后的值被保存到新记录中。

      【讨论】:

      • 我原以为ToArray 会创建一个副本,但如果Add 也这样做,我不会感到惊讶。
      • 这确实有效,干杯格兰特,总是简单的事情!
      猜你喜欢
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2018-01-12
      相关资源
      最近更新 更多