2010-01-31 182 views
4

我有一個表格,我希望將信息從第一個表單傳遞到第二個表單,當用戶單擊編輯按鈕時,將根據哪一行進行選擇。將數據從一種表單傳遞到其他表格

什麼是最好的方法?以及如何決定如果用戶想要添加一個新的表單或者用第一個表單datagrid的選定行中的值填充第二個(編輯)表單時該表單應該是空白的? 行值是同一對象的所有屬性。

我可以刪除並添加一個新的對象,它編輯一個現在很難用的對象,我應該如何加載第二個表單?

我目前正在創建和實例然後instance.Show();

這是工作打開一個空白表格,但我想要加載與基於選定的行的對象,當用戶想編輯一個現有的記錄。

+0

Web窗體或Windows窗體或WPF窗體? – abmv 2010-01-31 07:20:41

+0

Windows窗體,桌面應用程序。 – Alex 2010-01-31 08:28:14

回答

1

假設你的form1是帶有顯示MyClass類實例行的數據網格(grdMyData)的表單,form2是用於編輯給定行數據的表單。 當用戶點擊編輯,你可以這樣做:

private void btnEdit_Click(sender e, EventArgs arg) 
{ 
    if (grdMyData.SelectedRows.Count == 0) 
     return; //nothing to do 

    MyClass selectedRow = (MyClass)grdMyData.SelectedRows[0].DataBoundItem; 
    Form2 frm2 = new Form2(selectedRow); 
    if (frm2.ShowDialog() == DialogResult.OK) 
    { 
     //do something if needed 
    } 
} 

此代碼是假設你有正確的窗體2的構造這需要對象的它與類型。當你在Form2中工作時,數據將自動影響Form1顯示,因爲它們正在處理同一對象的實例。

+0

謝謝,我終於弄清楚瞭如何用對象作爲參數來創建另一個構造函數。這樣一個簡單的解決方案正盯着我。 – Alex 2010-02-03 10:04:10

0

我建議以一種形式暴露事件​​其他形式可以消耗。

這裏是官方教程
http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx

基本上它會是這樣的

// Source form 
public event YourEventHandlerType EventName; 

// Wherever the event occurs 
EventName.Invoke(...); 

// Destination form 
this.referenceToSourceForm.EventName += MyEventHandler(...); 

所以,你需要在目標表單一些參考源代碼的形式,或者需要否則在兩種形式之外設置事件處理。

相關問題