【问题标题】:How do I get column names to print in this C# program?如何在这个 C# 程序中打印列名?
【发布时间】:2010-04-01 03:14:37
【问题描述】:

我拼凑了一个 C# 程序,该程序接受 .csv 文件并将其写入 DataTable。使用这个程序,我可以遍历DataTable 的每一行并打印出该行中包含的信息。控制台输出如下所示:

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

【问题讨论】:

    标签: c# datatable datarow datacolumn


    【解决方案1】:

    你需要循环loadDT.Columns,像这样:

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

    【讨论】:

    • 太棒了!非常感谢您的快速回复!
    • 我明白了,loadDT.Columns 上的这个循环是否应该在 loadDT.Rows 的循环内?
    • @Kevin:是的,你的第一个循环是.Rows,第二个是.Columns,然后你可以参考row[column.ColumnName]来访问当前行中的每一列值。
    • 谢谢,艾哈迈德!非常感谢!
    • @hellouworld:因为DataColumnCollection没有实现IEnumerable<T>,所以var没有强类型枚举器来推断类型。 (这个类早于泛型的存在)
    【解决方案2】:
    foreach (DataRow row in dt.Rows)
    {
        foreach (DataColumn column in dt.Columns)
        {
            ColumnName = column.ColumnName;
            ColumnData = row[column].ToString();
        }
    }
    

    【讨论】:

    • 像魅力一样工作
    【解决方案3】:

    如果您不想遍历所有列,也可以像这样专门访问列名:

    table.Columns[1].ColumnName

    【讨论】:

      【解决方案4】:

      查找列名的代码与在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;
          }
      }
      

      【讨论】:

        【解决方案5】:

        打印带列的数据表行

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-09
          • 1970-01-01
          • 2021-03-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多