2010-04-01 41 views
47

我拼湊了一個C#程序,需要一個.csv文件並將其寫入DataTable。使用這個程序,我可以循環遍歷DataTable的每一行,並打印出包含在該行中的信息。控制檯輸出看起來是這樣的:如何獲取列名以在此C#程序中打印?

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

我想打印的列名的每個值的旁邊,爲好,這樣它看起來像這樣:

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

有人可以看看我的代碼並告訴我可以添加哪些內容以便列名打印?我對C#很陌生,所以如果我忽略了某些東西,請原諒我。

這裏是我的代碼:

// 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

詳細的博客與例子:http://sforsuresh.in/c-getting-column-name-dataset/ – 2018-03-06 12:01:43

回答

85

您需要循環loadDT.Columns,像這樣:

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

太棒了!非常感謝您的快速響應! – Kevin 2010-04-01 03:19:25

+0

只是所以我明白,loadDT.Columns的循環應該在loadDT.Rows的循環中嗎? – Kevin 2010-04-01 03:32:18

+1

@Kevin:是的,你的第一個循環用於'.Rows',第二個用於'.Columns',然後你可以引用'row [column.ColumnName]'來訪問當前行中的每個列值。 – 2010-04-01 03:50:55

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

代碼查找列名稱相同的SQL使用Like

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