如何从数据表中获取行号?

66

我正在循环遍历数据表中的每一行:

foreach (DataRow row in dt.Rows) {}

我想要获取dt数据表格中当前行的索引。例如:

int index = dt.Rows[current row number]

我应该如何做这件事?


告诉我们你正在使用哪个数据库,获取行号的方法是不同的。例如,在Oracle中,您可以选择“rownum”。 - FrustratedWithFormsDesigner
7个回答

124
int index = dt.Rows.IndexOf(row);

但你最好使用for循环而不是foreach。


6
这段代码将强制搜索内部的红黑树以查找数据表中的每一行,而简单的for循环则不需要这样的开销(因为您已经掌握了索引)。 - Justin Niessner
7
使用for循环当然是更好的选择,但这不是问题所在。 - Jamie Ide
如果在DataRows的foreach循环中设置断点,您可以在内部看到row._rowID,但由于某种原因,它不是公开的字段。但是,如果您只是在VS中运行代码,可以设置断点并查看此变量以确定循环的位置。但正如所说,最好使用for循环并测量增量器。 - Rob

33

如果你需要正在处理的项的索引,那么使用 foreach 循环迭代集合是错误的方法。改变循环方式以获取索引:

for(int i = 0; i < dt.Rows.Count; i++)
{
    // your index is in i
    var row = dt.Rows[i];
}

4

为什么不试试这个?

for(int i=0; i < dt.Rows.Count; i++)
{
  // u can use here the i
}

4

在这里您有两个选项。

  1. 您可以创建自己的索引计数器并对其进行递增
  2. 而不是使用foreach循环,您可以使用for循环

每行数据仅表示数据本身,因此它不知道它位于哪一行。


3

您知道DataRow是DataTable的行吗?

您目前已经遍历了每一行,只需跟踪有多少行即可获取当前行。

int i = 0;
int index = 0;
foreach (DataRow row in dt.Rows) 
{
index = i;
// do stuff
i++;
} 

1
这个答案很难理解,特别是考虑到当前的问题。他只是在问如何获取当前行的索引。他在第一行、第二行等等吗? - Anthony Pegram
1
你的原始回答与此不同,完全没有达到要求。否则,你不会完全替换它。至于提供我自己的答案,这是不必要的。Justin已经给出了我会给出的答案。 - Anthony Pegram

0
ArrayList check = new ArrayList();            

for (int i = 0; i < oDS.Tables[0].Rows.Count; i++)
{
    int iValue = Convert.ToInt32(oDS.Tables[0].Rows[i][3].ToString());
    check.Add(iValue);

}

-1

尝试:

int i = Convert.ToInt32(dt.Rows.Count);

我认为这是最短、也是最简单的方法。


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