I just prototyped this very quickly, by adding an unbound DataGridView to a form, then adding four columns, two textbox columns and two combobox columns.
The entire code-behind is shown below:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn) dataGridView1.Columns[1];
DataGridViewComboBoxColumn col2 = (DataGridViewComboBoxColumn)dataGridView1.Columns[2];
List<string> items = new List<string>(){"B", "C", "E", "A"};
col.DataSource = items;
col.SortMode = DataGridViewColumnSortMode.Automatic;
col2.DataSource = items;
col2.SortMode = DataGridViewColumnSortMode.Automatic;
dataGridView1.Rows.Add(new string[] {"A", "B", "C", "D"});
dataGridView1.Rows.Add(new string[] { "B", "C", "C", "F" });
dataGridView1.Rows.Add(new string[] { "C", "B", "A", "A" });
}
}
The sorting is working perfectly for me in this very simple example.
You may need to post code examples to narrow down what the difference is in your code.
One possible I can think of is that I"m binding to a list of strings, not objects.
According to the documentation you can also provide your own custom handler for the SortCompare event.