JOE SKEET
JOE SKEET

Reputation: 8108

How to get the row number from a datatable?

I am looping through every row in a datatable:

foreach (DataRow row in dt.Rows) {}

I would like to get the index of the current row within the dt datatable. for example:

int index = dt.Rows[current row number]

How do i do this?

Upvotes: 70

Views: 258396

Answers (6)

namco
namco

Reputation: 6338

Why don't you try this

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

Upvotes: 4

user620755
user620755

Reputation: 11

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);

}

Upvotes: 0

Security Hound
Security Hound

Reputation: 2551

You do know that DataRow is the row of a DataTable correct?

What you currently have already loop through each row. You just have to keep track of how many rows there are in order to get the current row.

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

Upvotes: 3

Jamie Ide
Jamie Ide

Reputation: 49261

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

But you're probably better off using a for loop instead of foreach.

Upvotes: 130

Justin Niessner
Justin Niessner

Reputation: 245429

If you need the index of the item you're working with then using a foreach loop is the wrong method of iterating over the collection. Change the way you're looping so you have the index:

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

Upvotes: 33

Mitchel Sellers
Mitchel Sellers

Reputation: 63126

You have two options here.

  1. You can create your own index counter and increment it
  2. Rather than using a foreach loop, you can use a for loop

The individual row simply represents data, so it will not know what row it is located in.

Upvotes: 4

Related Questions