Я бы рекомендовал использовать DefaultView для DataTable. Он имеет некоторые встроенные функции сортировки, которые немного более расширяемы. Самым простым является RowFilter, но я не уверен, будет ли это именно то, что вам нужно, если ваши типы данных будут переопределены как .ToString () на уровне таблицы.
РЕДАКТИРОВАТЬ: добавлен фрагмент кода
Пользовательский метод, подобный этому, который, возможно, даже переопределяет или вызывается во время события сортировки вашего DataGridView, мог бы сортировать DataView до того, как на самом деле происходит привязка. Но, насколько я понимаю, IComparable никогда не вызывается, если вы не укажете, что он будет вызван.
protected void SortGrid()
{
System.Data.DataView dv = myDataTable.DefaultView;
myOjbect comparer = new MyObject();
// Comparer specifics go here. Sort order, column/fieldname etc
// or any custom properties used in sorting
dv.Sort(comparer)
dgMyGrid.DataSource = dv
dgMyGrid.DataBind()
}