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()
的说法也是正确的,因此从技术上讲,有两件事会阻止您修改的值保存到新记录中。
我正在尝试格式化我的 '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()
的说法也是正确的,因此从技术上讲,有两件事会阻止您修改的值保存到新记录中。