DataGridView 不需要调用 EndNew

发布于 2024-11-25 23:12:27 字数 1030 浏览 2 评论 0原文

我正在使用一个名为 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);
    }

I am using a class called SimpleFilteredList which I got from this site:

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

It allows me to apply basic sorting to business objects when added to a DataGridView through a BindgingSource. It has served my purposes very well, however I don't understand one aspect.

Each time a new row is selected in the DataGridView this prompts the overridden EndNew function in the SimpleFilteredList class to be called. This is particularly annoying when the last row was the previous row selected because it forces the sorting algorithm to be executed.

All the columns and the DataGridView have Readonly set to True, and AllowUserToAddRows and AllowUserToDeleteRows are set to False.

How can I stop this EndNew function being called when a new row is selected in the DataGridView?

EndNew function in SimpleFilteredList Class:

    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);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖上得阳光 2024-12-02 23:12:27

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

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

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

Check the index of the item and ignore the call if it's not specified.

Note In some scenarios, such as Windows Forms complex data binding,
the collection may receive CancelNew or EndNew calls for items other
than the newly added item. (Each item is typically a row in a data
view.) Ignore these calls; cancel or commit the new item only when
that item's index is specified.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文