How do I get column names to print in this C# program?
Asked Answered
T

6

77

I've cobbled together a C# program that takes a .csv file and writes it to a DataTable. Using this program, I can loop through each row of the DataTable and print out the information contained in the row. The console output looks like this:

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

I'd like to print the column name beside each value, as well, so that it looks like this:

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

Can someone look at my code and tell me what I can add so that the column names will print? I am very new to C#, so please forgive me if I've overlooked something.

Here is my 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?
    }
}
Tiling answered 1/4, 2010 at 3:14 Comment(0)
S
131

You need to loop over loadDT.Columns, like this:

foreach (DataColumn column in loadDT.Columns)
{
    Console.Write("Item: ");
    Console.Write(column.ColumnName);
    Console.Write(" ");
    Console.WriteLine(row[column]);
}
Schnauzer answered 1/4, 2010 at 3:16 Comment(5)
Just so I understand, should this loop over the loadDT.Columns be within the loop for loadDT.Rows?Tiling
@Kevin: yes, your 1st loop is for .Rows, 2nd is for .Columns, then you can refer to row[column.ColumnName] to access each column value in the current row.Skive
Lol. I am just curious, maybe someone come to an understanding why using var in this example instead of the DataColumn does not work? AFAIK it should work due to the semantics of var and foreach.Broadax
@hellouworld: Because DataColumnCollection doesn't implement IEnumerable<T>, so there is no strongly-typed enumerator for var to infer the type from. (this class predates the existence of generics)Schnauzer
This example gives me "foreach statement cannot operate on variables of type 'DataTable' because 'DataTable' does not contain a public instance or extension definition for 'GetEnumerator'" Tried creating my DataTable using var and gets the same result? (My probleam was leaving off ".columns"), having just forEach(DataColumn column in LoadDt)Tannate
L
35
foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn column in dt.Columns)
    {
        ColumnName = column.ColumnName;
        ColumnData = row[column].ToString();
    }
}
Leonorleonora answered 30/7, 2012 at 11:55 Comment(0)
D
5

You can access column name specifically like this too if you don't want to loop through all columns:

table.Columns[1].ColumnName
Demagogue answered 14/6, 2018 at 9:31 Comment(0)
G
3

Code for Find the Column Name same as using the Like in 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;
    }
}
Gemeinschaft answered 17/12, 2014 at 11:27 Comment(0)
S
2

Print datatable rows with column

Here is solution 

DataTable datatableinfo= new DataTable();

// Fill data table 

//datatableinfo=fill by function or get data from database

//Print data table with rows and column


for (int j = 0; j < datatableinfo.Rows.Count; j++)
{
    for (int i = 0; i < datatableinfo.Columns.Count; i++)    
        {    
            Console.Write(datatableinfo.Columns[i].ColumnName + " ");    
            Console.WriteLine(datatableinfo.Rows[j].ItemArray[i]+" "); 
        }
}


Ouput :
ColumnName - row Value
ColumnName - row Value
ColumnName - row Value
ColumnName - row Value
Salutation answered 24/4, 2018 at 10:46 Comment(0)
M
0
var ds = new DataSet();

var name = ds.Tables[0].Columns[0].ColumnName;
Manolete answered 5/2, 2024 at 11:49 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.