您不必將窗體與當前行同步。這就是BindingSource
的用途。
當您對BindingSource
進行簡單綁定時,每次當前項目發生更改時,綁定控件都會更新,並且每當綁定控件中的值發生更改時,綁定項目中的基礎值就會更新。當您執行復雜綁定時(即綁定控件顯示BindingSource
的列表,而不僅僅是當前項目),在BindingSource
上更改Position
也會更改綁定控件中的當前位置,反之亦然。因此,在這種情況下,您希望使用簡單的綁定綁定第二個窗體上的控件,並在第一個窗體上使用複雜綁定綁定第一個窗體上的控件。
您需要做的唯一不尋常的事情是確保兩種表格都使用相同的BindingSource
。當您這樣做時,單擊DataGridView
中的新行將更新,BindingSource
,BindingSource
將值從當前綁定項目推送到綁定到它的所有簡單綁定控件。
這很容易實現。假設Form1
與DataGridView
形式,並且Form2
是一個與簡單地綁定控件,這樣做:
在Form1:
private BindingSource Source = new BindingSource();
Form1_Load(object sender, EventArgs e)
{
// set Source's DataSource to your DataTable here.
mainDataGridView.DataSource = source;
// create DataGridView columns and their bindings here.
Form2 f2 = new Form2();
f2.TopMost = true;
f2.Source = Source;
f2.Show();
}
在窗體2:
public BindingSource Source { get; set; }
public void Form2_Load(object sender, EventArgs e)
{
idTextBox.DataBindings.Add("Text", Source, "id");
descriptionTextBox.DataBindings.Add("Text", Source, "description")
}
你明白了,非常感謝。我做了這件事,它工作正常。我只是不知道如何提交我的更改以及我做的測試,新添加的行只是在表單處理後顯示一些值,但是當選擇另一行時,值就存在。 – 2009-11-02 06:59:15
大部分情況下,只要'位置'發生變化,即用戶移動到另一行時,就會執行更改。您可以通過調用'BindingSource'上的'EndEdit'來顯式提交當前行的掛起更改。 (你可以通過調用'CancelEdit'來回滾它們。) 只要添加一個新行,當添加一個新行時,新行中的每一列都會填充其DataColumn中定義的任何DefaultValue '。然後它被添加到列表中,並且任何複雜綁定的控件都會被通知新行存在,並顯示它。 – 2009-11-02 08:55:34