将数据表列转换为双C#

时间:2017-06-07 08:32:01

标签: csv datatable double

我从csv文件中读取了一些列,然后在DataGridView中显示它们。专栏"价值"包含一些3位整数值。我想让datagridview中显示的这个整数值为一个小数位的两倍。转换似乎不起作用。此外,当我加载一个大的csv文件(大约30k行)时,它会立即加载,但转换需要花费太多时间。

 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;

1 个答案:

答案 0 :(得分:0)

听起来你有两个问题:

  1. 如何将值格式化为单个小数位。
  2. 为什么代码的转换部分需要这么长时间?
  3. 这是可能性

    1. 请参阅this answer,其中指明了使用
    2. 的可能性

      private void Button_Click(object sender, RoutedEventArgs e) { cmb.IsEnabled = true; }

      1. 每次读取一行时,您都会遍历数据表的每一行。这意味着当您读取CSV的第10行时,您将遍历第1行的第1-9行。再次使用DataTable!对于你读过的每一行都是如此!重构将该循环拉出ReadLine ......就像这样:

        ComboBox