DataGridView对EndNew的不必要调用

时间:2011-07-21 00:30:30

标签: c# .net winforms datagridview bindinglist

我正在使用一个名为SimpleFilteredList的类,我从这个站点获取:

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

它允许我在通过BindgingSource添加到DataGridView时对业务对象应用基本排序。它很好地服务于我的目的,但我不明白一个方面。

每次在DataGridView中选择一个新行时,都会提示调用SimpleFilteredList类中被覆盖的EndNew函数。当最后一行是选择的前一行时,这尤其令人讨厌,因为它强制执行排序算法。

所有列和DataGridView都将Readonly设置为True,AllowUserToAddRows和AllowUserToDeleteRows设置为False。

如何在DataGridView中选择新行时停止调用此EndNew函数?

SimpleFilteredList中的EndNew函数类:

    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 个答案:

答案 0 :(得分:1)

检查项目的索引,如果未指定,则忽略该呼叫。

  

注意在某些情况下,例如Windows Forms复杂数据绑定,   该集合可能会收到其他项目的CancelNew或EndNew调用   比新添加的项目。 (每个项目通常是数据中的一行   查看。)忽略这些电话;仅在取消或提交新项目时   该项目的索引已指定。

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