遍历DataTable

27

好的。我有一个包含多个列和多行的DataTable。

我想要动态地遍历这个DataTable,基本上输出应该如下所示(不包括大括号):

Name (DataColumn)
Tom  (DataRow)
Peter (DataRow)

Surname (DataColumn)
Smith (DataRow)
Brown (DataRow)

foreach (DataColumn col in rightsTable.Columns)
{
     foreach (DataRow row in rightsTable.Rows)
     {
          //output              
     }
} 

我打出了这段代码,但发现它不起作用。请问有没有更好的方法可以实现这个功能?


1
请您详细说明一下您是如何“注意到这不起作用”的?它有什么问题? - Rob H
4个回答

63
foreach (DataColumn col in rightsTable.Columns)
{
     foreach (DataRow row in rightsTable.Rows)
     {
          Console.WriteLine(row[col.ColumnName].ToString());           
     }
} 

3
DataRow对象可以接受DataColumn作为参数。因此,不必使用row[col.ColumnName]的方式,而是可以直接使用row[col]。 - jjspierx

15
     foreach (DataRow row in dt.Rows) 
     {
        foreach (DataColumn col in dt.Columns)
           Console.WriteLine(row[col]);
     }

问题在于它会针对每个数据行重复显示列名,而我不想要这样。基本上,我希望该列只显示一次,然后呈现该列的所有行。 - SpaceApple

9
请尝试以下代码:
//Here I am using a reader object to fetch data from database, along with sqlcommand onject (cmd).
//Once the data is loaded to the Datatable object (datatable) you can loop through it using the datatable.rows.count prop.

using (reader = cmd.ExecuteReader())
{
// Load the Data table object
  dataTable.Load(reader);
  if (dataTable.Rows.Count > 0)
  {
    DataColumn col = dataTable.Columns["YourColumnName"];  
    foreach (DataRow row in dataTable.Rows)
    {                                   
       strJsonData = row[col].ToString();
    }
  }
}

4
如果您想要更改数据表中每个单元格的内容,那么我们需要创建另一个数据表,并使用“导入行”将其绑定如下。如果我们不创建另一个表,则会抛出异常,提示“集合已修改”。
请考虑以下代码。
//New Datatable created which will have updated cells
DataTable dtUpdated = new DataTable();

//This gives similar schema to the new datatable
dtUpdated = dtReports.Clone();
foreach (DataRow row in dtReports.Rows)
{
    for (int i = 0; i < dtReports.Columns.Count; i++)
    {
        string oldVal = row[i].ToString();
        string newVal = "{"+oldVal;
        row[i] = newVal;
    }
    dtUpdated.ImportRow(row); 
}

这将使所有以括号({)开头的单元格:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接