I think the reason you are seeing this behavior is that when all the records from a group are removed, that group is marked as collapsed and stays that way event if you add new records later.
One solution might be to add code that remembers the dataTable.Rows.Count before your call to adapter.Fill. Then afterwards have code like:
for(int i = 0; i < oldRowCount; ++i)
{
dataTable.Rows.RemoveAt(0);
}
This would add all the new records first, and then remove the old ones later. (without calling DataTable.Clear). In this case, I think the expand state would remain as before. This does assume the DataTable schema does not change.