2011-08-28 32 views
1

我遇到了datagridview問題。Form2更改不反映Form1中的更改​​

表1:用datagridview的填充數據...(當i上數據網格視圖單擊行中的相應行的值被傳送到另一種形式)

表格2:我有文本按鈕與保存按鈕

當我點擊datagrid視圖行的價值轉移到另一種形式這是工作正常.....

在表單2我已經做了一些與該數據的變化,但這種變化並不反映在形式1 datagrid view ...

我該如何解決這個問題.....

+0

你使用數據庫嗎?數據從哪裏來,如果不是? –

+0

無論如何,這可能會有所幫助:http://stackoverflow.com/questions/630343/correct-way-to-have-a-datagridview-visually-reflect-changes-in-its-datasource –

+0

我正在使用數據庫.. ....綁定datagrid視圖使用綁定源... –

回答

2

有幾種選擇給你。將Form1實例傳遞給Form2並從Form2中刷新Form1 DataGridView dataSource是一種選擇。

例如。 Form2的構造函數可以像下面

Form1 myForm1; 

public Form2(Form1 form1) 
{ 
    myForm1 = form1; 
} 

private void SaveButtonClicked() 
{ 
    //Refresh the Form1.DataGridView DataSource. 
} 

方法2

你可以調用通過創建窗體2事件刷新Form1中的DataGridView在Form1中的方法。

+0

如何實現第二個選項..... –

1

要回答這個問題,我們必須知道如何將所選GridRow的值傳遞給其他窗體的控件。

例如,如果您的網格綁定到數據集/數據表,例如,一旦您在UI中選擇了一行,並且顯示了另一個表單並且該DataGridRow的字段被分解到不同的控件中,那麼您將哪些對象傳遞給另一個形成?

我會例如將DataRow鏈接到網格中的選定行,這種方式在第二種形式中仍然有對數據行的引用,並且當有人更改文本框中的值時(例如),您可以手動用用戶輸入的新值更新數據行列的值。

以這種方式,如果在之前的窗體中刷新網格,您將看到更改。

請注意,這可以通過許多不同的方式完成,如果我可以從頭開始編寫整個邏輯,但我不會使用這種方法,但是現在不能提出更多建議。

0

如果您使用ShowDialog()方法顯示Form2,則此調用將暫停Form1,直到Form2未關閉。

這是最簡單的方法。例如。

Form1 { 
    UpdateRowMethod() { 
     DataRow Row = GetSelectedRow() 
     Form2 frm; 
     frm = new Form2(Row.Field1, Row.Field2, Row.Field3) 
     if frm.ShowDialog() = OK { 
     Row.Field1 = frm.Property1 
     Row.Field2 = frm.Property2 
     Row.Field3 = frm.Property3 
     DataGridView1.InvalidateSelectedRow() 
     } 
    } 
} 

而你可以看到Form2接受Row的Field Values作爲其構造函數的參數。而Form2通過其屬性返回更新的數據。

如果您使用Show()方法,則需要實現事件/委託以便通知Form1數據已更改。

0

在Form1中創建一個BindingSource,用它來填充Form1中的DataGridView。在調用它之前將BindingSource傳遞給Form2。您的所有更改將自動進入/退出。除了BindingSouce屬性外,您不需要公開Form2中的任何屬性(如果您不想通過它的構造函數傳遞它)。