【问题标题】:How to get index in C# foreach如何在 C# foreach 中获取索引
【发布时间】:2021-09-28 15:07:41
【问题描述】:

我正在循环我的表格数据并尝试将表格行放在 excel 文件中,但我需要获取每一行的索引才能在我的 excel 文件中创建行。

foreach (DataRow row in dt.Rows)
{
  xlWorkSheet.Cells[2, 1] = row["Id"].ToString();
  xlWorkSheet.Cells[2, 2] = row["ProductId"].ToString();
  xlWorkSheet.Cells[2, 3] = row["OrderQuantity"].ToString();
  xlWorkSheet.Cells[2, 4] = row["CustomerID"].ToString();
  xlWorkSheet.Cells[2, 5] = row["OrderDate"].ToString();
  xlWorkSheet.Cells[2, 6] = row["Tax"].ToString();
  xlWorkSheet.Cells[2, 7] = row["Total"].ToString();
  xlWorkSheet.Cells[2, 8] = row["Net"].ToString();
}

我所需要的只是将xlWorkSheet.Cells[2, 8] 中的2(excel 行号)替换为foreach index 数字,而不是静态row 2,它将是row 3, 4,5,6,...,具体取决于我有多少行数据库。

有什么建议吗?

【问题讨论】:

  • 使用在循环外声明并在其中递增的局部变量,或切换到 for 循环 for(int i = 0; i
  • @T.Schwarz 对不起,我不明白!那么我如何获得我的row["Id"]
  • 你可以使用 LINQ:foreach(var (row,index) in dt.Rows.Select((v,i) => (v,i)))
  • int rowcount = 0; foreach(dt.Rows 中的 DataRow 行){ xlWorkSheet.Cells[rowcount, 1] = row["Id"].ToString(); ....... 行数++;}

标签: c# excel


【解决方案1】:

您可以在 foreach 循环之外初始化一个局部变量并将其递增到最后一行。这将保留当前行。例如

int i=0; 
foreach (DataRow row in dt.Rows) 
{

xlWorkSheet.Cells[i, 1] = row["Id"].ToString(); 
i++; 
} 

【讨论】:

  • 我的荣幸 :) 编码愉快
【解决方案2】:

您可以在每次迭代时声明一个 int 增量。 例如(伪代码):

    int count = 0;
    foreach (DataRow row in dt.Rows)
    {
      xlWorkSheet.Cells[count, 1] = row["Id"].ToString();
      ...
      xlWorkSheet.Cells[count, 8] = row["Net"].ToString();
      count ++;
    }

如果适合您的需要,您当然可以从 2 开始初始化 count 的值。它只会增加它。

【讨论】:

    猜你喜欢
    • 2014-09-12
    • 2022-01-23
    • 2019-12-06
    • 2020-02-25
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多