DataGridView нежелательных звонков в EndNew - PullRequest
4 голосов
/ 21 июля 2011

Я использую класс 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 Ответ

1 голос
/ 21 июля 2011

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

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

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

...