我正在使用一个名为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);
}
答案 0 :(得分:1)
检查项目的索引,如果未指定,则忽略该呼叫。
注意在某些情况下,例如Windows Forms复杂数据绑定, 该集合可能会收到其他项目的CancelNew或EndNew调用 比新添加的项目。 (每个项目通常是数据中的一行 查看。)忽略这些电话;仅在取消或提交新项目时 该项目的索引已指定。
http://msdn.microsoft.com/en-us/library/system.componentmodel.icanceladdnew.aspx