朱瑞芳
摘要:該文主要介紹了一種數(shù)據(jù)控件DataGridView,它是ADO.NET3.5中新增加的一種網(wǎng)格控件,能以表格的形式顯示數(shù)據(jù)。該文介紹如何通過DataGridView控件與DataAdapter及其它幾個常用對象的結(jié)合實現(xiàn)數(shù)據(jù)庫的添加、修改、刪除等操作。
關(guān)鍵詞:DataGridView;添加;更改;刪除
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)25-0189-03
To Investigate the Application of B.NET Technology & DataGridView Control
ZHU Rui-fang
(NanTong University,NanTong 226000, China)
Abstract: DataGridView control is a new addition control to the ADO.NET3.5 in thegrid control which can display the data in tabular form. This report illustrates how the DataGridView control, DataAdapter object and some others can be used to complete the operation of adding , changing and deleting database, etc.
Key words: DataGridView; add; change; delete
Visual Studio 2010在工具箱中提供了一些可視化設(shè)計的數(shù)據(jù)控件,合理地使用這些控件,會起到事半功倍的效果。常用的控件名稱和作用分別如下:
DataSet:數(shù)據(jù)集控件,提供類型化和非類型化的數(shù)據(jù)集對象;
DataGridView:數(shù)據(jù)表格視圖,以表格的形式顯示數(shù)據(jù);
BindingSource: 綁定數(shù)據(jù)源控件,封裝數(shù)據(jù)源并提供導(dǎo)航、篩選、排序和更新功能;
BindingNavigator: 綁定導(dǎo)航控件,在窗體界面中用于導(dǎo)航和綁定數(shù)據(jù)的標(biāo)準(zhǔn)控件。
本文著重探討DataGridView控件的運用。因為在Windows應(yīng)用程序中,DataGridView具有極高的可配置性和可擴展性,它提供有大量的屬性、方法、事件,可以用來對外觀和行為進(jìn)行定義。因此在需要顯示表格數(shù)據(jù)時,首選的是DataGridView控件,它是使用非常頻繁的數(shù)據(jù)控件。本文通過二種方案,分別介紹如何通過DataAdapter對象,結(jié)合DataGridView控件實現(xiàn)數(shù)據(jù)源的添加、修改、刪除。
1 環(huán)境準(zhǔn)備
1.1 軟件
在Windows系統(tǒng)上正確安裝好Visual Studio 2010和Sql Server 2008。
1.2 數(shù)據(jù)準(zhǔn)備
打開SQL Server,服務(wù)器類型為數(shù)據(jù)庫引擎,服務(wù)器名稱為本地計算機名稱,身份驗證為Sql server身份驗證,用戶名和密碼分別為sa和sa123。為了便于理解,現(xiàn)假設(shè)數(shù)據(jù)庫位置為本臺電腦的C盤根目錄下,名稱為: StudentInf ,即c:\StudentInf.mdf
該數(shù)據(jù)庫中有一個名稱為 Grade的數(shù)據(jù)庫表。表的內(nèi)容如圖1所示:
圖1 在SQL Server 2008顯示的Grade表
啟動Visual Studio 2010,新建項目,選擇Visual Basic 、Windows_ Windows窗體運用程序,假設(shè)工程名稱為“Project”.
2 DataGridView控件的運用
2.1 命名空間
對應(yīng)SQL Server.NET的4個核心對象分別是SqlConnection、 SqlCommand 、SqlDataReadert、 SqlDataAdpter,這4個對象包含在System.Data.SqlClinet命名空間中。所以,在程序最前面,必須寫上:
Imports System.Data.SqlClient
2.2 綁定數(shù)據(jù)庫
DataGridView控件與數(shù)據(jù)庫的綁定
(1)方法一:打開VB.NET2010 程序,在窗體設(shè)計界面上,添加DataGridView控件。點擊dataGridView1控件右上角的小三角形,創(chuàng)建對象連接,綁定數(shù)據(jù)源(如圖2所示)。
(2)方法二:選擇菜單命令:“數(shù)據(jù)”——“顯示數(shù)據(jù)源”——“添加新數(shù)據(jù)源”,按相應(yīng)的提示完成數(shù)據(jù)庫的綁定?;蛘哂肧qlConnection對象與SQL數(shù)據(jù)庫建立連接:
SqlConnection.ConnectionString = "Data Source=服務(wù)器位置;Initial Catalog=服務(wù)器位置;" & _
"Integrated Security=false;User ID=用戶名為;Password=密碼"
當(dāng)數(shù)據(jù)源添加完成后,點擊“顯示數(shù)據(jù)源”選擇相應(yīng)的表名,出現(xiàn)如圖3所示;
右擊表名grade(而非列名)右側(cè)下拉列表,選擇DataGridView. 再將圖3中的grade表從數(shù)據(jù)源拖到窗體中,這時DataGridView控件和工具條(BindingNavigater)、組件欄(DataSet、TableAdapter、BindingSource、BindingNavigator)都自動出現(xiàn)在界面上,完成DataGridView控件與指定數(shù)據(jù)源的綁定。這時在窗體運行的事件中自動添加一條記錄(Me.GradeTableAdapter.Fill(Me.StudentInfDataSet.grade)
即當(dāng)此程序運行時,能直接顯示相應(yīng)的數(shù)據(jù),程序執(zhí)行結(jié)果便出現(xiàn)如圖4所示。
圖5 界面設(shè)計
2.3 設(shè)計窗體界面
為了介紹如何通過文本框與DataGridView1控件的結(jié)合實現(xiàn)數(shù)據(jù)的添加、編輯和刪除,現(xiàn)設(shè)計如圖5所示的界面。即包括“添加”、“修改”、“刪除”三個命令按鈕;5個文本框、5個標(biāo)簽、1個DataGridView控件。將DataGridView1控件的SelectionMode屬性設(shè)置為FullRowSelect.
3 關(guān)鍵代碼
3.1 總代碼
Imports System.Data.SqlClient
Public Class Form1
…
End Class
3.2 具體過程
總代碼里的“…”包括如下幾個方面的內(nèi)容。
3.2.1 申明4個對象:
Dim Conn As SqlConnection:Dim da As SqlDataAdapter:Dim ds As DatSet :Dim dt As DataTable
3.2.2 窗體load事件
Me.GradeTableAdapter.Fill(Me.StudentInfDataSet.grade)
3.2.3 DataGridView控件的CellClick事件
功能是將所選中行的各單元格數(shù)據(jù)定義到對應(yīng)的文本框,代碼為:
If e.RowIndex < DataGridView1.Rows.Count - 1 Then
TextBox1.Text = DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString()
TextBox2.Text = DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString()
TextBox3.Text = DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString()
TextBox4.Text = DataGridView1.Rows(e.RowIndex).Cells(3).Value.ToString()
TextBox5.Text = DataGridView1.Rows(e.RowIndex).Cells(4).Value.ToString()
End If
‘Rows(e.RowIndex)用于返回選中的行,Cell(0)到cell(1)分別是記錄的各個字段,因為DataGridView最后一行總是為空,所以最后一行不用讀到上面的文本框中,所以使用e.RowIndex < DataGridView1.Rows.Count – 1進(jìn)行條件判斷。
3.2.4 實現(xiàn)數(shù)據(jù)的添加、修改、刪除
這里包含三個事件,每一個事件過程里都有共同部分:連接并打開數(shù)據(jù)庫,最后更新數(shù)據(jù)源和關(guān)閉數(shù)據(jù)庫。因此只在添加程序的過程里把代碼寫全,后面兩個過程則省略。
(1)添加功能由Button1_Click事件實現(xiàn)
原理:在文本框里輸入內(nèi)容(或點擊DataGridView1,使選中的行賦給各文本框后修改),后將文本框內(nèi)容賦給DataGridView1的新行。詳細(xì)代碼如下:
Conn = New SqlConnection()
Conn.ConnectionString = "Data Source=(local);Initial Catalog=StudeintInf;" & _
"Integrated Security=false;User ID=sa;Password=sa123"
‘連接本地的數(shù)據(jù)庫名稱為StudentInf的文件. 以SQL Server身份登錄,用戶名為sa、密碼為 sa123。
Conn.Open() ‘打開數(shù)據(jù)庫
Dim dr As DataRow
dr = ds.Tables("mytb1").NewRow ' 在內(nèi)存中創(chuàng)建一個空行
dr("學(xué)號") = TextBox1.Text: dr("姓名") = TextBox2.Text:
dr("語文") = TextBox3.Text: dr("數(shù)學(xué)") = TextBox4.Text: dr("英語") = TextBox5.Text
ds.Tables(“mytb1”).Rows.Add(dr) '將值賦給DataSet對象
Dim scb As New SqlCommandBuilder(da):da.Update(ds, "mytb1") ‘更新到數(shù)據(jù)庫中
DataGridView1.DataSource = ds.Tables("mytb1") ‘將數(shù)據(jù)與DataGridView1綁定
Conn.Close() ‘?dāng)?shù)據(jù)庫關(guān)閉
(2)修改功能由Button2_Click事件實現(xiàn)
原理:將需要修改的行選中,這時DataGridView1選中行的各單元格都復(fù)制到了各文本框里;經(jīng)修改后,再賦給DataGridView1控件相應(yīng)的行,其中主鍵“學(xué)號”不能修改。
關(guān)鍵代碼:
'連接并打開數(shù)據(jù)庫,代碼略
Dim dr As DataRow
ds.Tables("mytb1").PrimaryKey = New DataColumn() {ds.Tables("mytb1").Columns("學(xué)號")}
'將修改行設(shè)為當(dāng)前行,并利用ds.Tables("mytb1").PrimaryKey設(shè)置主鍵,
dr = ds.Tables("mytb1").Rows.Find(Textbox1.text)
‘因為textbox1.text中存儲的學(xué)號是主鍵,所以利用Rows.Find(Textbox1.text)定位到要修改的行
dr("學(xué)號") = TextBox1.Text: dr("姓名") = TextBox2.Text:dr("語文") = TextBox3.Text:
dr("數(shù)學(xué)") = TextBox4.Text: dr("英語") = TextBox5.Text ‘找到當(dāng)前的記錄并在文本框里修改
'提交到數(shù)據(jù)庫(代碼略)
(3)刪除功能由Button3_Click事件實現(xiàn)
'取出要刪除的行對象
Dim delRow as _
DataRow=BiningContext(DataGridView1.DataSource,DataGridView1.DataMember).Current.Row
Delrow.Delete() ' 刪除行
'提交到數(shù)據(jù)庫(代碼略)
4 使用UpdateCommand 和InsertCommand 屬性實現(xiàn)DataGridView數(shù)據(jù)的添加、修改
界面設(shè)計:三個DataGridView控件,名稱分別設(shè)置為DGV1、DGV2、DGV3,Dim strInsertSQL = "INSERT INTO grade(學(xué)號,姓名,語文,數(shù)學(xué),英語) VALUES(11,'小王',98,99,100)"
Dim strSelectSQL = "SELECT * FROM grade WHERE 學(xué)號=11"
Dim strUpdateSQL = "UPDATE grade SET 語文=99,數(shù)學(xué)=88,英語=77 WHERE 學(xué)號=2015011"
Dim InsertComm As New SqlCommand(strInsertSQL, Conn) '創(chuàng)建Command對象
Dim SelectComm As New SqlCommand(strSelectSQL, Conn)
Dim UpdateComm As New SqlCommand(strUpdateSQL, Conn)
da = New SqlDataAdapter() '創(chuàng)建DataAdapter對象da
Conn.Open()
da.SelectCommand = SelectComm:da.UpdateCommand = UpdateComm:
da.InsertCommand = InsertCommds
ds= New DataSet(): da.Fill(ds, "grade1") '創(chuàng)建并填充DataSet
da.InsertCommand.ExecuteNonQuery() :da.Fill(ds, "grade2")
da.UpdateCommand.ExecuteNonQuery():da.Fill(ds, "grade3")
'將DataSet綁定到DataGrid控件
DGV1.DataSource = ds.Tables("grade1"): DGV2.DataSource = ds.Tables("grade2")
DGV3.DataSource = ds.Tables("grade3")
Conn.Close()
程序使用了Select語句、Update語句和Insert語句,并分別賦值給DataAdapter對象的3個屬性。依次,便可以看到三個DataGridView內(nèi)數(shù)據(jù)的變化。順便說明當(dāng)Connection對象執(zhí)行Open方法的時候,DataAdapter對象將自動調(diào)用SelectCommand屬性。除了這個屬性,其他3個屬性都需要使用ExecuteNonQuery()方法調(diào)用(圖略)。
5 結(jié)束語
DataGridView控件還有很多相關(guān)屬性設(shè)置:如隱藏所選中的列或列頭;是否禁止列高、行寬改變;設(shè)定列寬和行高的最小值;使用 ReadOnly 屬性設(shè)定單元格是否只讀;是否顯示最下面的新行;設(shè)定單元格的指定背景顏色等。因此熟練掌握VB.NET的DataGridView控件運用,能輕松實現(xiàn)數(shù)據(jù)的瀏覽、添加和更新和刪除。要想利用DataGridView控件設(shè)計高效、穩(wěn)定的數(shù)據(jù)庫管理系統(tǒng)還需要繼續(xù)探討和研究。而由于VB.NET具有自由開發(fā)設(shè)計通用模塊的特點,使得數(shù)據(jù)庫管理系統(tǒng)的設(shè)計越來越輕松而簡單。
參考文獻(xiàn):
[1] 石志國,劉冀偉,張維存. VB.NET數(shù)據(jù)庫編程[M].北京:清華大學(xué)出版社,2009.
[2]青島樂合信息技術(shù)有限公司 青島海爾軟件有限公司.Web Services應(yīng)用開發(fā)[M].北京:電子工業(yè)出版社,2011.
[3]余青松,江紅.VB.NET 程序設(shè)計[M].北京:清華大學(xué)出版社,2011.