The GridDataBoundGrid only displays the rows in your datasource, and displays them in the exact order that they appear in the datasource.
If you are using a DataTable as the datasource, then when you sort it, the datasource is really DataTable.DefaultView (so you datatable can be displayed as sorted.) So, when you add a row to your datatable, the defaultview will position it according to its Sort property. This is all done outside the grid, and is completely handled by the DataTable.
If you want to keep using a DataTable as your datasource, to avoid this behavior means you have to handle all the sorting yourself and not relie on the sortting that depends upon Datatable.DefaultView. This takes some non-trivail coding. While it is not exactly what you need, here is a sample
that shows one way to manage this problem. The idea is to handle grid.Model.QueryCellInfo and use this event to control the display order of the rows through an indexer class. This technique can be adapted to not move new rows added at the bottom until the next sort.