視窗表單控件可以直接連接到數據源,但被設計成與一個BindingSource控制中使用。這用於從表單控件向數據源輸入和從數據源輸入。
這是你可以拖動到您的窗體設計器中,然後你可以將它設置爲你的DataGridView控件的數據源的組件。
一旦它的形式,你可以使用設計器將其設置爲數據源爲您的datagridview。然後,您可以使用事件處理程序,例如,表單加載事件處理程序來提供數據表作爲綁定源的數據源。
綁定源爲您提供了更精細的控制如何以及何時數據從表單控件轉移到下層數據源。只需使用綁定源即可解決您的問題。如果沒有,那麼在嘗試保存數據之前調用綁定源上的EndEdit方法應該會將未完成的編輯寫入數據表。
舉一個簡單的例子,創建一個新的Windows窗體項目。在表單中,添加一個名爲「datagridview1」的datagridview,一個名爲peopleBinding源的BindingSource和一個名爲saveButton的命令按鈕。將gridview1的數據源設置爲peopleBindingSource。
添加form.Load和saveButton.Click事件處理程序如下:
public DataTable GetData()
{
DataTable t = new DataTable();
t.Columns.Add("FirstName", typeof(string));
t.Columns.Add("LastName", typeof(string));
t.Rows.Add("Joe","Bloggs");
t.Rows.Add("Fred","Bloggs");
return t;
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.AutoGenerateColumns = true;
DataTable people = GetData();
peopleBindingSource.DataSource = people;
}
private void SaveButton_Click(object sender, EventArgs e)
{
DataTable t = peopleBindingSource.DataSource as DataTable;
}
運行的應用程序,你會發現,如果你檢查的數據表中SaveButton_Click你已經對所做的任何更改數據被保存。
如果你喜歡的Visual Studio編寫所有的代碼,您:
- 添加使用「添加數據源......」嚮導創建新的數據源。
- 從數據源窗口中,將表格拖到表單上。
Visual Studio將添加必要的DataGridView,BindingSource等並將它們全部連接起來。然後你可以檢查代碼,看看它們如何組合在一起。
如果他們實際上是點擊一個提交按鈕,那麼焦點已經離開了網格。這就是爲什麼Grid.Focused是錯誤的。必須有另一個原因,這些更改沒有提交給數據源。 – 2012-03-05 20:52:59
@IgbyLargeman -k,我該找什麼? – MAW74656 2012-03-05 20:53:39
您可以在這裏詳細介紹一下工作流程。你說用戶沒有點擊一行,但保存被觸發。什麼觸發了?我在過去很久以前就碰到過類似的事情,所以細節很模糊。一如往常一些代碼會真的幫助。 – 2012-03-05 21:04:51