You should use the view, and not the collection to sort the elements to bind. This works:
private void button2_Click(object sender, System.EventArgs e)
{
// Sorteer op achternaam.
dataGrid1.DataSource = null;
IEntityView view = _authors.DefaultView;
view.Sorter = new SortExpression(AuthorsFields.AuLname | SortOperator.Ascending);
dataGrid1.DataSource = view;
}
Clicking other columns also sorts the columns and removing the last row works properly.
The collection is bound through its DefaultView (which is an EntityView instance), as the collection implements IListSource, so the grid will ask IListSource.GetList() on the collection for the real object to bind to. The collection will return the DefaultView instance. You can also create your own view and bind to that.
This is recommended as Sorting the collection itself is deprecated, it's a left over of the IBindingList implementation on the collection.
Now, of course you wonder, why doesn't it work? Hard to tell. The sort routine does raise ListChange(reset ) on the collection after the sort action. This signals the view to reset itself and the grid acknowledges that as it repaints the grid, sorted. However, that it still gets confused... no idea.