【问题标题】:How to store sorted records in csv file?如何将排序的记录存储在csv文件中?
【发布时间】:2010-05-05 09:25:30
【问题描述】:

我使用 TradingDate 列按日期对数据表的记录进行排序,该列的类型为 datetime.

TableWithOnlyFixedColumns.DefaultView.Sort = "TradingDate asc";

现在我想将这些排序的记录存储到 csv 文件中,但存储的记录不是按日期排序的。

 TableWithOnlyFixedColumns.DefaultView.Sort = "TradingDate asc";
  DataTable newTable = TableWithOnlyFixedColumns.Clone();
  newTable.DefaultView.Sort = TableWithOnlyFixedColumns.DefaultView.Sort;
  foreach (DataRow oldRow in TableWithOnlyFixedColumns.Rows)
  {
     newTable.ImportRow(oldRow);
  }
  // we'll use these to check for rows with nulls
  var columns = newTable.DefaultView.Table.Columns.Cast<DataColumn>();
  using (var writer = new StreamWriter(@"C:\Documents and Settings\Administrator\Desktop\New.csv"))
  {
     for (int i = 0; i < newTable.DefaultView.Table.Rows.Count; i++)
     {
        DataRow row = newTable.DefaultView.Table.Rows[i];
        // check for any null cells
        if (columns.Any(column => row.IsNull(column)))
        continue;
       string[] textCells = row.ItemArray
      .Select(cell => cell.ToString()) // may need to pick a text qualifier here
      .ToArray();
      // check for non-null but EMPTY cells
      if (textCells.Any(text => string.IsNullOrEmpty(text)))
      continue;
      writer.WriteLine(string.Join(",", textCells));
    }
 }

那么如何将排序后的记录存储到 csv 文件中呢?

【问题讨论】:

    标签: c# winforms csv sorted system.data.datatable


    【解决方案1】:

    这行代码;

    DataRow row = newTable.DefaultView.Table.Rows[i]; 
    

    正在引用 DataView 后面未排序的 DataTable。您需要使用 DataRowView 而不是 DataRow 并从 DataView 访问已排序的行;

    DataRowView row = newTable.DefaultView[i]; 
    

    【讨论】:

    • @Matt,那么我无法为该代码行下方的行获取方法 isNull()。
    • 您可以通过 Row 属性 row.Row.IsNull 访问 isNull() 方法,可能需要更改您的变量名称 :-)
    • @Matt,谢谢它的工作原理。但是我不明白当我们对数据表的记录进行排序时它没有物理排序并且根据我们对数据表的记录进行排序的概念没变?
    • DataView 是与 SQL 中的视图类似的概念,它只是提供了另一种查看原始数据的方式。在数据库或内存数据表中更改数据的物理顺序是一个相当昂贵的过程。
    • @Matt,那么当我们使用 defaultView 对数据表记录进行排序时,它只是虚拟地排序了记录?我们如何对数据表记录进行物理排序?
    猜你喜欢
    • 2011-02-14
    • 2022-01-18
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多