DataGridView нежелательные вызовы EndNew

Я использую класс SimpleFilteredList, который я получил с этого сайта:

http://blogs.msdn.com/b/winformsue/archive/2007/12/06/filtering-code.aspx

Это позволяет мне применять базовую сортировку к бизнес-объектам при добавлении в DataGridView через BindgingSource. Это очень хорошо послужило моим целям, однако я не понимаю ни одного аспекта.

Каждый раз, когда в DataGridView выбирается новая строка, это вызывает переопределенную функцию EndNew в классе SimpleFilteredList. Это особенно раздражает, когда в последней строке была выбрана предыдущая строка, потому что это вызывает выполнение алгоритма сортировки.

Для всех столбцов и DataGridView для Readonly установлено значение True, а для AllowUserToAddRows и AllowUserToDeleteRows установлено значение False.

Как я могу остановить вызов этой функции EndNew при выборе новой строки в DataGridView?

Функция EndNew в классе SimpleFilteredList:

    public override void EndNew(int itemIndex)
    {
        // Check to see if the item is added to the end of the list,
        // and if so, re-sort the list.
        if (sortPropertyValue != null && itemIndex > 0 && itemIndex == this.Count - 1)
            ApplySortCore(this.sortPropertyValue, this.sortDirectionValue);
        base.EndNew(itemIndex);
    }

1 ответ

Решение

Проверьте индекс элемента и проигнорируйте вызов, если он не указан.

Примечание. В некоторых сценариях, таких как сложное связывание данных Windows Forms, коллекция может получать вызовы CancelNew или EndNew для элементов, отличных от вновь добавленного элемента. (Каждый элемент обычно представляет собой строку в представлении данных.) Игнорируйте эти вызовы; отменить или зафиксировать новый элемент, только если указан индекс этого элемента.

http://msdn.microsoft.com/en-us/library/system.componentmodel.icanceladdnew.aspx

Другие вопросы по тегам