2011-02-18 2 views
0

のために私はデータグリッドを持っているようなので、データバインディングの前およびデータバインディングの後にそれで何かをしたい:ラッパーは、例えば、コードブロック

dgvTasksDocList.SaveLayoutToFile(); 
sTATUSCHANGESEXTENDEDBindingSource.DataSource = dt; 
dgvTasksDocList.RestoreLayoutFromFile(); 

と私はいくつかを結合するとき、すべてのその例で、このようなコードを追加したいですソース。いくつかのアクションの前/後にそのようなコードを書く簡単な方法はありますか(もちろん、この2行を追加することはできますが、そのようなことをする既知の方法がいくつかあります)。

+1

なぜこれらの3行はすべての場合に機能しないのでしょうか。データをバインドする前と後で何かしたい場合は、データをバインドする必要があります。その事実の周りに他の方法はありません。 –

答えて

0

AOP-http://en.wikipedia.org/wiki/Aspect-oriented_programmingのケースと思われます。

[PersistLayout] 
public void BindDataSource(object dt) 
{ 
    sTATUSCHANGESEXTENDEDBindingSource.DataSource = dt; 
} 

あなたの追加の2ラインを呼び出すためのコンパイル時に続いてPostsharp意志エクステントソース・コード:

PostSharpとたとえば、あなたは、属性PersistLayoutを作成し、このようにそれを適用することができるようになります。

その他の考え方は、sTATUSCHANGESEXTENDEDBindingSource.DataSourceプロパティセッターでこれらの2つのメソッドを呼び出すかもしれませんが、この決定にはもっと多くのコンテキストを知る必要があります。 dgvTasksDocList.DataSourceは(必ず私はそれを提供しなければならないBindingSourceにキャストすることができますので

dgvTasksDocList.BindSourceAndSaveLayouts(dt); 

dgvTasksDocList.BindSourceAndSaveLayouts(sTATUSCHANGESEXTENDEDBindingSource, dt); 

あるいは:今、それはのように見える、拡張メソッドでそれを作った

+1

それでも、メソッドを保存してレイアウトを読み込ませることで、彼自身が簡単に書くことができることを除いては、このような単純な作業にPostSharpを使用することの利点はありません。 @Ramhound - 完全に合意しました。 –

+1

私はAOP/PostSharpが好きですが、これは核デバイスを使ってドアを開けるようなものです。 – RQDQ

+0

あなたはすべて、私の仕事を達成するために前/後の文字列を書くだけのベストな方法だと思いますか?それでは、BindingSourceの拡張メソッドを書いて、グリッドのレイアウトを保存し、いくつかのデータソースを提供します。回答ありがとうございました。実際にスノーベアが正しいので、この答えにANSWERとマークします:)私たちは確かにポストシャープでそれを達成することができます。 – 0x49D1

0
public class MyDGV : DataGridView 
{ 
    public MyDGV() 
    { 
     DataSourceChanged += (s, e) => SaveLayoutToFile(); 
     DataBindingComplete += (s, e) => RestoreLayoutFromFile(); 
    } 
} 
+0

ありがとうございました:)別のソリューション.. Iveはそれをそうしました:dgvTasksDocList.BindSourceAndSaveLayouts(sTATUSCHANGESEXTENDEDBindingSource、dt); – 0x49D1