MAW74656
MAW74656

Reputation: 3549

Where does DataRowCollection.Add method insert the new row?

I'm trying to figure out where DataRowCollection.Add(DataRow row) inserts the new row into its datatable. Is it at the end of the table, like an append? Is it random?

Also, I want to use this while I'm for looping through a datatable. If some condition exists, add a new row containing different data to run through the For loop to the end of the datatable. Are there any specific problems with this approach? How else might I handle it?

EDIT: I am For Looping through a .Net DataTABLE stored in memory. I'm not touching the dataBASE where the original data is stored during this looping operation. The DataTABLE is populated prior to the loop and is not a problem.

Here is relavant code:

 DataTable machineANDlastDate = new DataTable();
//Populate machineANDlastDate  

for (int i = 0; i < machineANDlastDate.Rows.Count; i++)
{
   lastFutureDate = DateTime.Parse(machineANDlastDate.Rows[i]["MaxDueDate"].ToString());
   newDateTime = lastFutureDate.AddDays(frequency);    //This is where the new date is created.
   machineSerial = machineANDlastDate.Rows[i]["machineSerial"].ToString();

   if (newDateTime < DateTime.Now)
   {
          machineANDlastDate.Rows.Add(new String[] { machineSerial,         newDateTime.AddDays(frequency).ToString() });

          continue;
   } 
  ...Removed for irrelevancy...
}

Is this a valid way to add a row to the end of the datatable?

Upvotes: 1

Views: 3791

Answers (4)

Phil Gan
Phil Gan

Reputation: 2863

If you want to know if a row is new or not you can check the DataRow.RowState property.

// your code to add rows
...

// process added rows
foreach (DataRow row in machineANDlastDate.Rows)
{
    if (row.RowState == DataRowState.Added)
    {
        // do stuff
    }
}

// now confirm new rows (they won't have a RowState of Added after this)
machineANDlastDate.AcceptChanges();

Upvotes: 1

acconrad
acconrad

Reputation: 3219

The Add method will insert a DataRow into a DataRowCollection object only. To actually add the DataRow to the data table, you will need to call the NewRow method which appends itself onto the DataTable, and thus appends the row to the table in that database. For reference, check out http://msdn.microsoft.com/en-us/library/9yfsd47w.aspx

Upvotes: -3

S&#246;ren
S&#246;ren

Reputation: 2741

As far as I know, it is always added to the end of the collection.

If you for loop through the database, there shouldn't be a problem, if you begin at the beginning of the data table and finish at the end of it or smth similar. However, you will then also loop through the newly created data rows, and I don't know whether you want to achieve this. You only could get problems if you take a foreach loop instead because it cannot handle modifications of the underlying collection.

Upvotes: 3

Carlos Valenzuela
Carlos Valenzuela

Reputation: 834

It's always at the end of the table, as far as i know most of the DataBase conectors, whe you use their add row, its always at the end.

Upvotes: 0

Related Questions