Csv 将datatable列转换为双C#
我从csv文件中读取一些列,然后将其显示在DataGridView中。“值”列包含一些3位整数值。我想让这个整数值在datagridview中显示为带小数点的双精度值。转换似乎不起作用。此外,当我加载一个大的csv文件(大约30k行)时,它会立即加载,但转换需要花费太多时间Csv 将datatable列转换为双C#,csv,datatable,double,Csv,Datatable,Double,我从csv文件中读取一些列,然后将其显示在DataGridView中。“值”列包含一些3位整数值。我想让这个整数值在datagridview中显示为带小数点的双精度值。转换似乎不起作用。此外,当我加载一个大的csv文件(大约30k行)时,它会立即加载,但转换需要花费太多时间 using (StreamReader str = new StreamReader(openFileDialog1.FileName)) { CsvReader csvReadFi
using (StreamReader str = new StreamReader(openFileDialog1.FileName)) {
CsvReader csvReadFile = new CsvReader(str);
dt = new DataTable();
dt.Columns.Add("Value", typeof(double));
dt.Columns.Add("Time Stamp", typeof(DateTime));
while (csvReadFile.Read()) {
var row = dt.NewRow();
foreach (DataColumn column in dt.Columns) {
row[column.ColumnName] = csvReadFile.GetField(column.DataType, column.ColumnName);
}
dt.Rows.Add(row);
foreach (DataRow row1 in dt.Rows)
{
row1["Value"] = (Convert.ToDouble(row1["Value"])/10);
}
}
}
dataGridView1.DataSource = dt;
听起来你有两个问题:
String.Format(“{0:0.###}”,(十进制)myTable.Rows[rowIndex]。Columns[columnIndex])代码>
每次读取一行时,您都要迭代数据表的每一行。这意味着当您读取CSV的第10行时,您将再次迭代数据表的第1-9行!你读到的每一行都是如此!重构以将该循环从读取行中拉出。。。大概是这样的:
using (StreamReader str = new StreamReader(openFileDialog1.FileName)) {
CsvReader csvReadFile = new CsvReader(str);
dt = new DataTable();
dt.Columns.Add("Value", typeof(double));
dt.Columns.Add("Time Stamp", typeof(DateTime));
while (csvReadFile.Read()) {
var row = dt.NewRow();
foreach (DataColumn column in dt.Columns) {
row[column.ColumnName] = csvReadFile.GetField(column.DataType, column.ColumnName);
}
dt.Rows.Add(row);
}
foreach (DataRow row1 in dt.Rows)
{
row1["Value"] = (Convert.ToDouble(row1["Value"])/10);
}
}
dataGridView1.DataSource = dt;