2010-04-01 35 views
47

He improvisado un programa C# que toma un archivo .csv y lo escribe en un DataTable. Usando este programa, puedo recorrer cada fila del DataTable e imprimir la información contenida en la fila. La salida de la consola se ve así:¿Cómo obtengo los nombres de columna para imprimir en este programa C#?

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

me gustaría para imprimir el nombre de la columna al lado de cada valor, así, para que se vea así:

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

Puede alguien mira mi código y dime ¿qué puedo agregar para que se impriman los nombres de las columnas? Soy muy nuevo en C#, así que por favor, perdónenme si he pasado por alto algo.

Aquí está mi código:

// 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 detallada con el ejemplo: http://sforsuresh.in/c-getting-column-name-dataset/ –

Respuesta

85

Necesitas bucle sobre loadDT.Columns, así:

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

impresionante! ¡Muchas gracias por la respuesta rápida! – Kevin

+0

Solo para que entienda, ¿debería este bucle sobre loadDT.Columns estar dentro del ciclo para loadDT.Rows? – Kevin

+1

@Kevin: sí, su primer ciclo es para '.Rows', 2nd es para' .Columns', luego puede referirse a 'row [column.ColumnName]' para acceder a cada valor de columna en la fila actual. –

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

Código para encontrar el nombre Columna mismo que usar el Like en 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; 
    } 
} 
Cuestiones relacionadas