У меня это работает со следующим кодом.
Пожалуйста, извините за грубый код - я просто показываю ключевые моменты, но могу предоставить более полный пример, если вам нужно.
У меня есть SortableBindingList _names, который привязан к моему DataGridView. Затем в моей форме есть кнопка с новыми именами, добавленными в обработчик Click даже. Это нормально работает, чтобы добавить имя Кевин между Джо и Пит .
private SortableBindingList<Names> _names;
public Form1()
{
InitializeComponent();
_names = new SortableBindingList<Names>();
_names.Add(new Names() { Name = "joe" });
_names.Add(new Names() { Name = "pete" });
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
col1.DataPropertyName = "Name";
dataGridView1.Columns.Add(col1);
dataGridView1.DataSource = _names;
}
private void button1_Click(object sender, EventArgs e)
{
_names.Add(new Names(){Name = "kevin"});
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
}
public class Names
{
public string Name { get; set; }
}
Итак, ключевым моментом является то, что я сортирую свой dataGridView после добавления в список.
Я мог бы также предоставить IComparer в моем вызове .Sort () - компаратор по умолчанию просто сравнивает с .ToString ()
Интересно, что в моем примере при вставке элемента также работает следующее:
private void button1_Click(object sender, EventArgs e)
{
//_names.Add(new Names(){Name = "kevin"});
_names.Insert(1, new Names() { Name = "kevin" });
// dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);
}
Достаточно просто вставить элемент в нужное место, чтобы сетка отображала список, отсортированный правильно. Я использую тот же список SortableBindingList, что и вы, который показан на MartinWilley.com.
Может быть, ваша проблема в том, что вы добавляете, а не вставляете?