4

このサイトから取得した SimpleFilteredList というクラスを使用しています。

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

BindingSource を介して DataGridView に追加すると、基本的な並べ替えをビジネス オブジェクトに適用できます。それは私の目的を非常によく果たしましたが、私は1つの側面を理解していません.

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 に答える