2010-05-05 6 views
0

Je trie les dossiers du datewise datatable avec la colonne TradingDate qui est le type de datetime.Comment stocker les enregistrements triés dans un fichier csv?

TableWithOnlyFixedColumns.DefaultView.Sort = "TradingDate asc";

Maintenant, je veux stocker ces enregistrements triés dans le fichier csv, mais les enregistrements stockés ne sont pas triés par date.

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

Alors, comment stocker les enregistrements triés dans un fichier csv?

Répondre

1

Cette ligne de code;

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

fait référence au DataTable non trié derrière le DataView. Vous devez utiliser un DataRowView au lieu d'un DataRow et accéder aux lignes triées à partir du DataView;

DataRowView row = newTable.DefaultView[i]; 
+0

@ Matt, alors je ne peux pas obtenir la méthode isNull() pour la ligne qui est en dessous de cette ligne de code. – Harikrishna

+0

vous pouvez accéder à la méthode isNull() à travers la propriété Row, row.Row.IsNull, pourrait vouloir changer le nom de votre variable :-) – Matt

+0

@ Matt, Merci cela fonctionne.Mais je ne comprends pas le concept de cela quand nous trions les enregistrements de la datatable il ne triés pas physiquement et selon que nous avons trié les enregistrements de la datatable n'est pas changé? – Harikrishna

Questions connexes