經過事件同步兩個窗體之間的數據

1、應用場景
一窗體(FormA)採用datagridview 等數據顯示控件顯示數據,須要雙擊其中的數據在另外一個窗體(FormB)顯示其詳細信息並能夠進行修改,當其修改完畢後,FormA窗體顯示更新過的數據,每當在FromB中添加的數據都能實時的顯示在FormA的數據顯示控件中。
2、解決方案思考
web

咱們不難看出,其實咱們要求的結果就是當FormB完成操做之後能回傳FormA一個信息,告訴他完成的什麼操做,和是否完成,FormA根據返回的狀態信息,來決定本身須要作些什麼。
一、設置FormB爲ShowDialog方式打開,操做完成後返回窗體狀態,FormA經過判斷窗體的窗體來決定是否從新刷新數據。
缺點:刷新數據可能須要從新載入數據,對於從數據庫中載入來講,大數據量將會是噩夢,並且由於是ShowDialog方式打開,在進行修改等操做時,其餘操做其餘窗體,必須等待完成。
二、在FormA窗體中定義操做數據顯示控件的委託方法,在打開FormB窗體時,將委託實例傳遞給FromB,在FormB完成修改等操做時,調用委託方法,實現實時修改顯示。
缺點:當FormA關閉時,委託調用會失敗,但解決了第一種方案的問題。
三、經過事件來同步更新數據,這篇文章主要簡單介紹如何經過事件來解決咱們這個問題,下面將詳細講下方法。
3、經過事件完成更新操做
步驟:
一、在FormB中定義委託和相應事件,代碼以下:
        /// <summary>        /// 添加新行完成後        /// </summary>        /// <param name="newRowData">新行數據</param>        public delegate void CompleteAddHandler(string[] newRowData);        /// <summary>        /// 修改數據完成後        /// </summary>        /// <param name="editRowData">修改事後的數據</param>        /// <param name="rowIndex">在datagridview中的行索引</param>        public delegate void CompleteEditHandler(string[] editRowData, int rowIndex);        //如下定義事件        public event CompleteAddHandler CompleteAddEventHandler;        public event CompleteEditHandler CompleteEditEventHandler;注:這裏只是個示例,你們能夠根據本身的實際狀況來定義委託和事件,來完成相應的操做。

二、在完成操做後調用事件代碼,好比如下代碼:
   1:  private void button1_Click(object sender, EventArgs e)   2:          {   3:              ///上面完成修改操做   4:              if (CompleteEditEventHandler != null)   5:                  CompleteEditEventHandler(editedRowData, RowIndex);   6:          }
注:這裏if(CompleteEditEventHandler!=null)是判斷有哪一個窗體訂閱了這個事件。 三、而後在FormA中調用FormB的時候這樣寫:
   1:   private void button2_Click(object sender, EventArgs e)   2:          {   3:              DataGridViewRow dr = this.dataGridView1.CurrentRow;   4:              if (dr != null)   5:              {   6:                  string[] edit = { dr.Cells[0].Value.ToString(),dr.Cells[1].Value.ToString(),dr.Cells[2].Value.ToString()};   7:                  MothedForm editForm = new MothedForm(edit, dr.Index);   8:                  editForm.CompleteEditEventHandler += new MothedForm.CompleteEditHandler(editForm_CompleteEditEventHandler);   9:                  editForm.Show();  10:              }  11:          }

這裏定義了處理事件,在FormA中的editForm_CompleteEditEventHandler中處理那邊觸發了事件傳遞過來的數據,咱們要作的就是把接收過來的數據放到咱們要顯示的控件上。
4、小結
今天有點累,寫的不是不少,可是把大概過程寫出來了,可能有些問題我寫的不夠入木三分,也可能有我本身理解不對的地方,也歡迎你們指正。附件傳一下詳細的測試代碼,代碼註釋很詳細。 有問題的也能夠跟貼提出,你們一塊兒學習。
相關文章
相關標籤/搜索