我遇到了datagridview問題。Form2更改不反映Form1中的更改
表1:用datagridview的填充數據...(當i上數據網格視圖單擊行中的相應行的值被傳送到另一種形式)
表格2:我有文本按鈕與保存按鈕
當我點擊datagrid視圖行的價值轉移到另一種形式這是工作正常.....
在表單2我已經做了一些與該數據的變化,但這種變化並不反映在形式1 datagrid view ...
我該如何解決這個問題.....
我遇到了datagridview問題。Form2更改不反映Form1中的更改
表1:用datagridview的填充數據...(當i上數據網格視圖單擊行中的相應行的值被傳送到另一種形式)
表格2:我有文本按鈕與保存按鈕
當我點擊datagrid視圖行的價值轉移到另一種形式這是工作正常.....
在表單2我已經做了一些與該數據的變化,但這種變化並不反映在形式1 datagrid view ...
我該如何解決這個問題.....
有幾種選擇給你。將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中的方法。
如何實現第二個選項..... –
要回答這個問題,我們必須知道如何將所選GridRow的值傳遞給其他窗體的控件。
例如,如果您的網格綁定到數據集/數據表,例如,一旦您在UI中選擇了一行,並且顯示了另一個表單並且該DataGridRow的字段被分解到不同的控件中,那麼您將哪些對象傳遞給另一個形成?
我會例如將DataRow鏈接到網格中的選定行,這種方式在第二種形式中仍然有對數據行的引用,並且當有人更改文本框中的值時(例如),您可以手動用用戶輸入的新值更新數據行列的值。
以這種方式,如果在之前的窗體中刷新網格,您將看到更改。
請注意,這可以通過許多不同的方式完成,如果我可以從頭開始編寫整個邏輯,但我不會使用這種方法,但是現在不能提出更多建議。
如果您使用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數據已更改。
在Form1中創建一個BindingSource,用它來填充Form1中的DataGridView。在調用它之前將BindingSource傳遞給Form2。您的所有更改將自動進入/退出。除了BindingSouce屬性外,您不需要公開Form2中的任何屬性(如果您不想通過它的構造函數傳遞它)。
你使用數據庫嗎?數據從哪裏來,如果不是? –
無論如何,這可能會有所幫助:http://stackoverflow.com/questions/630343/correct-way-to-have-a-datagridview-visually-reflect-changes-in-its-datasource –
我正在使用數據庫.. ....綁定datagrid視圖使用綁定源... –