4

我正在使用从该站点获得的名为 SimpleFilteredList 的类:

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

它允许我在通过 BindingSource 添加到 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);
    }
4

1 回答 1

1

检查项目的索引,如果未指定则忽略调用。

注意在某些情况下,例如 Windows 窗体复杂数据绑定,集合可能会收到对新添加项目以外的项目的 CancelNew 或 EndNew 调用。(每个项目通常是数据视图中的一行。)忽略这些调用;仅当指定项目的索引时才取消或提交新项目。

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

于 2011-07-21T11:25:28.180 回答