hope this fix your issue Actually, just performing a lock in one place on the DataTable or DataRow doesn't actually do anything. An important aspect to remember in using Monitor locks (which is what a lock block is) is that locking an object doesn't do anything to it; that's one reason that some advocate using dedicated locking objects rather than locking the resource itself, since it forces you to realize that you have to perform the lock (and on the same object) whenever you're dealing with the resource. That being said, it's a better idea to lock the entire DataTable, as the data storage itself is there (the DataRow objects internally only contain an offset into the DataTable as to where to retrieve the data). Because of this, even if you synchronize access to individual rows, updating two different rows simultaneously will cause you to update the same data storage mechanism in a non-synchronized manner.
Is DataRow thread safe? How to update a single datarow in a datatable using multiple threads? - .net 2.0
Any of those help Although the question is not quite clear it sounds like you have a group of rows from one table and want to update the equivalent rows in another datatable. If this is the case they you can just use the find method and manually update them as you suggested, or alternatively, add the new rows to another table and merge them (there are all sorts of options for merging two data tables). Merging however will just do the same thing under the hood (i.e. find by primary key and update the columns). Another way would be to just replace the row and set its status to modified datarow.SetModified()
How to select values from datatable based on another datatable using DataRow list