Domenic [CPUA 0x1337] wrote: Ah, my code is way too messy anyway, it's prolly a good thing I'm redoing it. If its too messy its probably a good idea :) Personally I find myself redoing lots of code because it becomes difficult to discern what is going on. Domenic [CPUA 0x1337] wrote: So, does this sound like a good plan? I just iterate through the rows every time columnchanging is called, determine the valid ones, rebuild my data structure using those, and then rebuild my datagrid from my datastructure. Without knowing whats going on its hard to say what would be best. From what I know I would let the datatable do its job then pull the data out of it only when its needed. Handling the ColumnChanging/ColumnChanged events as needed for validation; then run a final validation with the RowChanging event to ensure that fields within a row are ok. Domenic [CPUA 0x1337] wrote: And how to decide between ColumnChanged and ColumnChanging? Here's a quote from the documentation. The ColumnChanging, RowChanging, and RowDeleting events are raised during the update process. You can use these events to validate data or perform other types of processing. Because the updates are in process during these events, you can cancel the update by throwing an exception, which prevents the change from being completed. For more information, see Data Validation in Datasets. The ColumnChanged, RowChanged, and RowDeleted events are notification events that are raised when the update has been completed successfully. These events are useful when you want to take further action based on a successful update. Hopefully you can get some idea where to go from here :) James Sonork ID: 100.11138 - Hasaki "Smile your little smile, take some tea with me awhile. And every day we'll turn another page. Behind our glass we'll sit and look at our ever-open book, One brown mouse sitting in a cage." "One Brown Mouse" from Heavy Horses, Jethro Tull 1978