一、應用場景
一窗體(forma)採用datagridview 等資料顯示控制項顯示資料,需要雙擊其中的資料在另乙個窗體(formb)顯示其詳細資訊並可以進行修改,當其修改完畢後,forma窗體顯示更新過的資料,每當在fromb中新增的資料都能實時的顯示在forma的資料顯示控制項中。
二、解決方案思考
我們不難看出,其實我們要求的結果就是當formb完成操作以後能回傳forma乙個資訊,告訴他完成的什麼操作,和是否完成,forma根據返回的狀態資訊,來決定自己需要做些什麼。三、通過事件完成更新操作1、設定formb為showdialog方式開啟,操作完成後返回窗體狀態,forma通過判斷窗體的窗體來決定是否重新重新整理資料。
缺點:重新整理資料可能需要重新載入資料,對於從資料庫中載入來說,大資料量將會是噩夢,而且因為是showdialog方式開啟,在進行修改等操作時,其他操作其他窗體,必須等待完成。
2、在forma窗體中定義運算元據顯示控制項的委託方法,在開啟formb窗體時,將委託例項傳遞給fromb,在formb完成修改等操作時,呼叫委託方法,實現實時修改顯示。
缺點:當forma關閉時,委託呼叫會失敗,但解決了第一種方案的問題。
3、通過事件來同步更新資料,這篇文章主要簡單介紹如何通過事件來解決我們這個問題,下面將詳細講下方法。
步驟:
1、在formb中定義委託和相應事件,**如下:四、小結.csharpcode, .csharpcode pre///
/// 新增新行完成後
///
/// 新行資料
public
delegate
void completeaddhandler(string newrowdata);
///
/// 修改資料完成後
///
/// 修改過後的資料
/// 在datagridview中的行索引
public
delegate
void completeedithandler(string editrowdata, int rowindex);
//以下定義事件
public
event completeaddhandler completeaddeventhandler;
public
event completeedithandler completeediteventhandler;
.csharpcode pre
.csharpcode .rem
.csharpcode .kwrd
.csharpcode .str
.csharpcode .op
.csharpcode .preproc
.csharpcode .asp
.csharpcode .html
.csharpcode .attr
.csharpcode .alt
.csharpcode .lnum
-->
2、在完成操作後呼叫事件**,比如以下**:
1:private
void button1_click(object sender, eventargs e)
2:注:這裡if(completeediteventhandler!=null)是判斷有哪個窗體訂閱了這個事件。
3、然後在forma中呼叫formb的時候這樣寫:
1:private
void button2_click(object sender, eventargs e)
2: ;7: mothedform editform = new mothedform(edit, dr.index);8: editform.completeediteventhandler += new mothedform.completeedithandler(editform_completeediteventhandler);9: editform.show();10: }11: }這裡定義了處理事件,在forma中的editform_completeediteventhandler中處理那邊觸發了事件傳遞過來的資料,我們要做的就是把接收過來的資料放到我們要顯示的控制項上。
有問題的也可以跟貼提出,大家一起學習。
附件:http://u.115.com/file/f4e7af9506
關於兩個窗體之間交換資料
學習.net不短時間了,最近做的乙個東西需要用到在幾個窗體之間進行通訊。類似於一般軟體的設定這個選項卡,開啟時候進行一些基本引數的設定,然後主程式會根據這些引數作出反映。之前我採取的方法是在主窗體類中建立乙個子窗體的例項。然後把要傳遞的子窗體引數設定為public,這樣在主窗體中就可以呼叫了。這樣做...
兩個窗體之間傳遞物件
public archiext archiidgetinfo string archiid return objext catch exception ex 比如 我在窗體a中有個查詢的結果集 根據結果集中的序號來點選修改,就顯示資料庫中相對應的內容 首先呢,我們要寫個方法返回乙個物件,public...
兩個窗體之間的checkbox傳遞
例如有乙個窗體a 和乙個窗體b a上有乙個checkbox b 上也有乙個checkbox 執行a窗體勾選chk後調整b窗體 然後b窗體上的checkbox也被勾選上 在a窗體load事件中迴圈遍歷窗體上的checkbox 新增到list集合 a窗體listlist new list private...