2010-04-01 12 views
47

J'ai concocté un programme C# qui prend un fichier .csv et l'écrit dans un DataTable. En utilisant ce programme, je peux parcourir chaque ligne du DataTable et imprimer les informations contenues dans la rangée. La sortie de la console ressemble à ceci:Comment obtenir des noms de colonnes à imprimer dans ce programme C#?

--- Row --- 
Item: 1 
Item: 545 
Item: 507 
Item: 484 
Item: 501 

Je voudrais imprimer le nom de colonne à côté de chaque valeur, ainsi, de sorte qu'il ressemble à ceci:

--- Row --- 
Item: 1 Hour 
Item: 545 Day1 KW 
Item: 507 Day2 KW 
Item: 484 Day3 KW 
Item: 501 Day4 KW 

Quelqu'un peut-il regarder mon code et dites-moi ce que je peux ajouter pour que les noms des colonnes s'impriment? Je suis très nouveau à C#, alors s'il vous plaît pardonnez-moi si j'ai oublié quelque chose.

Voici mon code:

// Write load_forecast data to datatable. 
DataTable loadDT = new DataTable(); 
StreamReader sr = new StreamReader(@"c:\load_forecast.csv");      

string[] headers = sr.ReadLine().Split(','); 
foreach (string header in headers) 
{ 
    loadDT.Columns.Add(header); // I've added the column headers here. 
} 

while (sr.Peek() > 0) 
{ 
    DataRow loadDR = loadDT.NewRow(); 
    loadDR.ItemArray = sr.ReadLine().Split(','); 
    loadDT.Rows.Add(loadDR); 
} 

foreach (DataRow row in loadDT.Rows) 
{ 
    Console.WriteLine("--- Row ---"); 
    foreach (var item in row.ItemArray) 
    { 
     Console.Write("Item:"); 
     Console.WriteLine(item); // Can I add something here to also print the column names? 
    } 
} 
+0

Un blog détaillé avec par exemple: http://sforsuresh.in/c-getting-column-name-dataset/ –

Répondre

85

Vous devez faire une boucle sur loadDT.Columns, comme ceci:

foreach (DataColumn column in loadDT.Columns) 
{ 
    Console.Write("Item: "); 
    Console.Write(column.ColumnName); 
    Console.Write(" "); 
    Console.WriteLine(row[column]); 
} 
+0

Impressionnant! Merci beaucoup pour la réponse rapide! – Kevin

+0

Juste pour que je comprenne, cette boucle sur le loadDT.Columns devrait-elle être dans la boucle pour loadDT.Rows? – Kevin

+1

@Kevin: oui, votre 1ère boucle est pour '.Rows', 2ème est pour' .Columns', alors vous pouvez vous référer à 'row [column.ColumnName]' pour accéder à chaque valeur de colonne dans la ligne courante. –

18
foreach (DataRow row in dt.Rows) 
{ 
    foreach (DataColumn column in dt.Columns) 
    { 
     ColumnName = column.ColumnName; 
     ColumnData = row[column].ToString(); 
    } 
} 
0

Code pour trouver le nom de colonne identique à l'aide de la Like dans sql.

foreach (DataGridViewColumn column in GrdMarkBook.Columns) 
         //GrdMarkBook is Data Grid name 
{      
    string HeaderName = column.HeaderText.ToString(); 

    // This line Used for find any Column Have Name With Exam 

    if (column.HeaderText.ToString().ToUpper().Contains("EXAM")) 
    { 
     int CoumnNo = column.Index; 
    } 
}