2011-01-24 45 views
3

データグリービューでDataSourceChangingイベントが発生する可能性はありますか? DataGridViewには、DataSourceChangedイベントがあります。これは、DataSourceがDataGridViewにバインドされた後に(私が)信じるイベントです。私はプロパティが変更される前にいくつかのことをしたい。 データソース変更前のDataGridViewイベント

鉱山のサンプルコード

...

private void LoadGrid() 
{ 
    // I do some things like saving user settings here 
    DtgRefundAssign.DataSource = BLL.GetDataSource(parameter1, parameter2); //Just to illustrate 
    // And restore them after the datasource is bound 

} 

は、私は多くの形態で同様の低いものを行う必要があります。データソースが変更されるたびに、これを行う共通の手順を開発することを考えてください。復元部分はDataSourceChangedイベントを使用して行うことができます...しかし、保存する部分を処理するためにはどのイベントを処理する必要がありますか?

答えて

5

私はこれを自分でやっていませんが、DataGridViewは封印されていないので、それを継承する新しいクラスを作成できるはずです。新しいイベント「DataSourceChanging」を作成し、次にDataSourceプロパティのSetterをオーバーライドして、最初にそのイベントを発生させるようにします。次にが実際に親クラスのプロパティを設定します。

デフォルトのデータグリッドビューの代わりにそのdatagridviewを使用し、保存ロジックをDataSourceChangingに接続します。

+0

はい..しかし、DataSourceプロパティは仮想ではありません...私はそれを無効にする方法はありますか? –

+0

私はそれを考えなかった。あなたがトリッキーなものを使ってそれを上書きさせないならば、別のプロパティを作成し、そのイベントを発生させて親データソースを設定させることができます。ちょっと面倒ですが、うまくいくでしょう。可能な回避策についてこの質問に(私はどちらも試していない):http://stackoverflow.com/questions/82437/why-is-it-impossible-to-override-a-getter-only-property-and -add-a-setter – Tridus

2

c#またはvb.netのどちらを使用するかに応じて、新しい/ shadowsキーワードを使用して、サブクラスでシャドウ/新規プロパティを作成することはできません。サブクラスのbase.DataSource呼び出しを使用して基本クラスのプロパティにアクセスし、サブクラスのthis.DataSourceを使用して新しいDataSourceプロパティにアクセスします。 :D

関連する問題