DataGridView中使用BindSource進行數據綁定操作


(轉載自:http://www.it165.net/pro/html/201310/7462.html)

使用WinForm已經有好長的一段時間,雖然一直知道得數據綁定是.NET下一項很強大的功能,平時也用的不少,但都是自己用代碼寫的綁定方法,純代碼流有好處是可以足夠的靈活,數據你愛怎么折騰就怎么折騰,而且如果結構設計得好的話可以很方便重用。還有一個問題是,用WinForm窗體控件自帶的綁定方式,會生出很多莫名的文件,這還不要緊,一旦涉及到ADO的東西我直接就繳械了——自從認識LinQ后我就很久沒用字符串來操作數據庫啦,也許那會效率很高,但也沒有證據顯示LinQ的效率低,在非嚴謹應用場景里,我更重視開發的效率。

 

DataGridView控件,凡是涉及到數據庫一般離不開這個控件,其功能強大到足以讓我仰視不止,在DataGridView下對數據庫進行增刪修改是家常便飯,我還真不敢說我對這個控件用得有多熟,如果可以選擇我還真不願意將精力用在枯燥的界面處理上。

 

重新用回SQLServer的東西,因為處理的幾個表比較簡單,所以我打算直接用WinForm自動生成的數據綁定功能,Google了一番,發現網上並沒比較完整的例程(可能東西比較簡單),於是小小的作一下筆記,經饗后來者,順便做一個備忘。

 

1、建立SQLServer的數據表

 

這點是玩SQLServer的入門活,我就不細說,因為是做演示,我弄了一個最簡表出來,如下圖所示,對了,我建表用的是SQL Server Manager Studio,對大多人來說應該沒有難度。

202103261.jpg

 

2、在工程中生成DataSet數據集

 

我個人對DataSet的理解只數據庫實體的一個抽象,簡單的說就是將原本用字符串操作數據庫轉變成用Adapter來操作,當然,其中也保留了靈活的SQL指令功能。

 

在生成DataSet之前,請在VisualStudio中的服務器資源管理器里生成一項“數據連接”,連接步驟1數據表Table_Test所在的數據庫,如下圖所示(圖中除Table_Test外其他請你們忽略,其他表不是我寫本Blog所要用到的)。

203254658.jpg

 

建立好數據連接后,在工程里新建一個數據集(DataSet),我個人的命名是MyDataSet,建立好后你會在資源管理窗口里見到一個MyDataSet.xsd的文件,你若有興趣可以看一下里面的東西,我不解釋。你雙擊xsd這個文件,它會提示你從服務器資源管理器里導入數據,你打開服務器資源管理器將上圖顯示的Table_Test直接拖到里面,會自動生成下面的表,DataSet的強大在於TableAdapter的強大,這是后話。

203958179.jpg

 

3、建立DataGridView的界面

 

新建一個WinForm的窗體,從工具箱里往窗體里拖一個DataGridView的控件,這很簡單,控件名姑且默認就好了。接下來是開始綁定數據。

 

DataGridView的右上角有個小三角形,點擊——選擇數據源——其他數據源——項目數據源——MyDataSet——Table_Test,好了,DataGridView就已經作好綁定,它會自動顯示Table_Test的全部內容,我這里當然是空,如下圖所示:

204819324.jpg

 

上面ColumnHeader的樣式我是修改過的,別太糾結,但重點不在這里,你看當前窗體的下方,VisualStudio會自動生成下面的幾個東西,這分別是MyDataSet、BindSource、TableAdapter的實例,是屬於當前窗體下的私有成員,這才是最關建的內容,當然,如果你僅是作顯示完全可以不用理會:

205004860.jpg

 

4、DataGridView的編輯

 

在DataGridView控件右上角的小三角形下,有三個選項:啟動添加、啟動編輯、啟動刪除,一般情況下要視具體情況而定,我這姑且就全選了。

 

在VisualStudio下生成工程,如下圖所示,你可以隨意編輯,因為ID的列,我在建表時設定自增量,並作為表的一個主鍵,所以本列你是編輯不了的,它會自動填充ID,只是我想不明白ID怎么會往負里增大呢?

205744799.jpg

 

5、綁定數據的保存

 

到這一步之前,我們還沒有使用任何一句代碼,我只能說,單純的數據顯示是非常傻瓜的,如果你想純代碼做到這一步,我想就算不困難也要花不少時間的。

 

數據綁定的概念是,將數據庫的數據同步到數據控件上,當控件上顯示的數據作了修改后,也一定能同步回數據庫里,這一步就必須要動用到偉大的Code了。保存的時機自己可以隨便,我在此是用了一個ContextMenuStrip的菜單控件,通過右鍵顯示快捷菜單,再點擊保存,其響應函數的內容如下:


01. /// <summary>
02. /// 綁定數據時自動生成的代碼,只用於顯示數據
03. /// </summary>
04. /// <param name="sender"></param>
05. /// <param name="e"></param>
06. privatevoid MaterialEditForm_Load(objectsender, EventArgs e)
07. {
08. // TODO: 這行代碼將數據加載到表“myDataSet.Table_Test”中。您可以根據需要移動或刪除它。
09. this.table_TestTableAdapter.Fill(this.myDataSet.Table_Test);
10. }
11. //
12. //
13. /// <summary>
14. /// 右鍵快捷菜單的響應函數
15. /// </summary>
16. /// <param name="sender"></param>
17. /// <param name="e"></param>
18. privatevoid 保存數據ToolStripMenuItem_Click(objectsender, EventArgs e)
19. {
20. //結束DataGridView的編輯狀態
21. this.dataGridView1.EndEdit();
22. //結束BindSource的編輯狀態,為提交更改作准備,重要
23. this.tableTestBindingSource.EndEdit();
24. //
25. //檢查是否作出更改
26. if(this.myDataSet.GetChanges() ==null)
27. {
28. return;
29. }
30. //
31. //同步數據至實體數據庫中
32. this.table_TestTableAdapter.Update(this.myDataSet);
33. }

6、結語

 

相像過么?正常情況下我們要插入哪怕一條小小的記錄(更別提刪除跟更新了),加上各種過濾的狀況,都不能說是很容易的事,可使用數據綁定的方法,只需要上面數句話就可以輕易完成添加、修改、刪除等全部的功況——這簡直是逆天的節奏啊!!!

 

(原來在作保存后,作為主鍵的ID是會自動變成正數的,如下圖所示:)

211505764.jpg






注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com