Datagridview / BindingSource и отсортированы: добавить запись в конец списка - PullRequest
5 голосов
/ 22 января 2010

Это будет глупый вопрос, но у меня есть сетевое представление с BindingSource в качестве источника данных.

bindingSources.Datasource - это собственный BindingList с поддержкой сортировки. Все это работает.

Но когда запись будет вставлена ​​в отсортированный список, она будет помещена в конец представления данных. После обновления (например, щелчком мыши) запись будет размещена в нужном месте.

Итак, я думаю, что я забыл что-то реализовать или вызвать, чтобы убедиться, что вставленная запись будет отображаться прямо в нужном месте таблицы данных.

Кто может мне помочь с подсказкой.

Спасибо.

Ответы [ 3 ]

1 голос
/ 22 января 2010

У меня это работает со следующим кодом.

Пожалуйста, извините за грубый код - я просто показываю ключевые моменты, но могу предоставить более полный пример, если вам нужно.

У меня есть 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.

Может быть, ваша проблема в том, что вы добавляете, а не вставляете?

0 голосов
/ 19 июня 2018

Этот фрагмент кода работает очень хорошо и достаточно быстро для большинства целей ...

int iColNumber = 3;  //e.g., sorting on the 3rd column of the DGV

MyBindingSource.DataSource = MyBindingList.OrderByDescending(o => o.GetType().GetProperty(MyDataGridView.Columns[iColNumber].Name).GetValue(o));
0 голосов
/ 22 января 2010

Может быть, попробовать обработать событие BindingSource.ListChanged?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...