C# 如何按列号或位置获取数据表的列

C# 如何按列号或位置获取数据表的列,c#,C#,我是C的新手。我知道如何使用一个简单的for-each循环来获得它,如下所示。你能告诉我如何按位置/索引/列号获得它吗 foreach (DataRow row_ in dt.Rows){ row = row_; foreach (DataColumn col_ in dt.Columns){ col = col_; strMsg = strMsg + col.ColumnName + ": " + row[col.Ordinal].ToString()

我是C的新手。我知道如何使用一个简单的for-each循环来获得它,如下所示。你能告诉我如何按位置/索引/列号获得它吗

foreach (DataRow row_ in dt.Rows){
  row = row_;
  foreach (DataColumn col_ in dt.Columns){
    col = col_;
    strMsg = strMsg + col.ColumnName + ": " + row[col.Ordinal].ToString() 
             + Environment.NewLine;
  }
  MessageBox.Show(strMsg);
  strMsg = "";
}

您可以通过IndexOf获取序号。以下是您的示例:

foreach (DataRow row_ in dt.Rows) {
  row = row_;
  foreach (DataColumn col_ in dt.Columns) {
    col = col_;
    strMsg = strMsg + col.ColumnName + ": " + row[dt.Columns.IndexOf(col_)].ToString() 
         + Environment.NewLine;
  }
  MessageBox.Show(strMsg);
  strMsg = "";
}
这是一个完全有效的示例:

var dt = new DataTable();

dt.Columns.Add(new DataColumn());
dt.Columns.Add(new DataColumn());

var row1 = dt.NewRow();
row1[0] = "0";
row1[1] = "1";
dt.Rows.Add(row1);

foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn col in dt.Columns)
    {
        var strMsg = col.ColumnName + ": " + row[dt.Columns.IndexOf(col)].ToString();
        Console.WriteLine(strMsg);
    }
}
如果只需要数组中的列名,请删除foreach循环并将其替换为以下行:

string[] colNames = (from DataColumn col in dt.Columns select col.ColumnName).ToArray();

您可以通过IndexOf获取序号。以下是您的示例:

foreach (DataRow row_ in dt.Rows) {
  row = row_;
  foreach (DataColumn col_ in dt.Columns) {
    col = col_;
    strMsg = strMsg + col.ColumnName + ": " + row[dt.Columns.IndexOf(col_)].ToString() 
         + Environment.NewLine;
  }
  MessageBox.Show(strMsg);
  strMsg = "";
}
这是一个完全有效的示例:

var dt = new DataTable();

dt.Columns.Add(new DataColumn());
dt.Columns.Add(new DataColumn());

var row1 = dt.NewRow();
row1[0] = "0";
row1[1] = "1";
dt.Rows.Add(row1);

foreach (DataRow row in dt.Rows)
{
    foreach (DataColumn col in dt.Columns)
    {
        var strMsg = col.ColumnName + ": " + row[dt.Columns.IndexOf(col)].ToString();
        Console.WriteLine(strMsg);
    }
}
如果只需要数组中的列名,请删除foreach循环并将其替换为以下行:

string[] colNames = (from DataColumn col in dt.Columns select col.ColumnName).ToArray();

我不确定我是否清楚您想要做什么,但为什么不使用DataReader来获取您想要的特定列呢?这将逐行向您返回结果。@curiousBoy-我不想使用foreach来获取数据列,而是想使用类似这样的forDataColumnAtIndex[index]{//code}。您可以在这里查看:希望它有助于实现myDataTable.Columns[7]不工作?@blato myDataTable.Columns.Count或myDataTable.Columns.Count与LinqI一起使用我不确定我是否清楚您想要做什么,但为什么不使用DataReader来获取您想要的特定列?这将逐行向您返回结果。@curiousBoy-我不想使用foreach来获取数据列,而是想使用类似这样的forDataColumnAtIndex[index]{//code}。您可以在这里查看:希望它有助于实现myDataTable.Columns[7]不起作用?@blato myDataTable.Columns.Count或myDataTable.Columns.Count与LinqIs有没有办法将所有列名放入一个数组,而不需要迭代行?当然,请完全删除foreach循环,并将其替换为以下行:string[]colNames=from DataColumn cols in dt.Columns选择coll.ColumnName.ToArray;如果我不删除DataColumns,那么会有任何问题吗?没问题,删除循环不会影响其他逻辑。有没有任何方法可以将所有列名放入一个数组中,而无需对行进行迭代?当然,完全删除foreach循环,并用以下行替换它们:string[]colNames=从dt.Columns中的数据列col选择col.ColumnName.ToArray;如果我不删除DataColumns,那么会有任何问题吗?没问题,删除循环不会影响其他逻辑。