Are you accessing the DataTable on multiple threads simultaneously? If so then that would be your issue. You should wrap any access to the table in a SyncLock block to make sure that multiple threads don't interleave.

As for the question you asked, you can use any list. By all means you can define your own class to represent a record and then use an array or collection of that type.