朱瑞芳
摘要:该文主要介绍了一种数据控件DataGridView,它是ADO.NET3.5中新增加的一种网格控件,能以表格的形式显示数据。该文介绍如何通过DataGridView控件与DataAdapter及其它几个常用对象的结合实现数据库的添加、修改、删除等操作。
关键词:DataGridView;添加;更改;删除
中图分类号:TP311 文献标识码: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在工具箱中提供了一些可视化设计的数据控件,合理地使用这些控件,会起到事半功倍的效果。常用的控件名称和作用分别如下:
DataSet:数据集控件,提供类型化和非类型化的数据集对象;
DataGridView:数据表格视图,以表格的形式显示数据;
BindingSource: 绑定数据源控件,封装数据源并提供导航、筛选、排序和更新功能;
BindingNavigator: 绑定导航控件,在窗体界面中用于导航和绑定数据的标准控件。
本文着重探讨DataGridView控件的运用。因为在Windows应用程序中,DataGridView具有极高的可配置性和可扩展性,它提供有大量的属性、方法、事件,可以用来对外观和行为进行定义。因此在需要显示表格数据时,首选的是DataGridView控件,它是使用非常频繁的数据控件。本文通过二种方案,分别介绍如何通过DataAdapter对象,结合DataGridView控件实现数据源的添加、修改、删除。
1 环境准备
1.1 软件
在Windows系统上正确安装好Visual Studio 2010和Sql Server 2008。
1.2 数据准备
打开SQL Server,服务器类型为数据库引擎,服务器名称为本地计算机名称,身份验证为Sql server身份验证,用户名和密码分别为sa和sa123。为了便于理解,现假设数据库位置为本台电脑的C盘根目录下,名称为: StudentInf ,即c:\StudentInf.mdf
该数据库中有一个名称为 Grade的数据库表。表的内容如图1所示:
图1 在SQL Server 2008显示的Grade表
启动Visual Studio 2010,新建项目,选择Visual Basic 、Windows_ Windows窗体运用程序,假设工程名称为“Project”.
2 DataGridView控件的运用
2.1 命名空间
对应SQL Server.NET的4个核心对象分别是SqlConnection、 SqlCommand 、SqlDataReadert、 SqlDataAdpter,这4个对象包含在System.Data.SqlClinet命名空间中。所以,在程序最前面,必须写上:
Imports System.Data.SqlClient
2.2 绑定数据库
DataGridView控件与数据库的绑定
(1)方法一:打开VB.NET2010 程序,在窗体设计界面上,添加DataGridView控件。点击dataGridView1控件右上角的小三角形,创建对象连接,绑定数据源(如图2所示)。
(2)方法二:选择菜单命令:“数据”——“显示数据源”——“添加新数据源”,按相应的提示完成数据库的绑定。或者用SqlConnection对象与SQL数据库建立连接:
SqlConnection.ConnectionString = "Data Source=服務器位置;Initial Catalog=服务器位置;" & _
"Integrated Security=false;User ID=用户名为;Password=密码"
当数据源添加完成后,点击“显示数据源”选择相应的表名,出现如图3所示;
右击表名grade(而非列名)右侧下拉列表,选择DataGridView. 再将图3中的grade表从数据源拖到窗体中,这时DataGridView控件和工具条(BindingNavigater)、组件栏(DataSet、TableAdapter、BindingSource、BindingNavigator)都自动出现在界面上,完成DataGridView控件与指定数据源的绑定。这时在窗体运行的事件中自动添加一条记录(Me.GradeTableAdapter.Fill(Me.StudentInfDataSet.grade)
即当此程序运行时,能直接显示相应的数据,程序执行结果便出现如图4所示。
图5 界面设计
2.3 设计窗体界面
为了介绍如何通过文本框与DataGridView1控件的结合实现数据的添加、编辑和删除,现设计如图5所示的界面。即包括“添加”、“修改”、“删除”三个命令按钮;5个文本框、5个标签、1个DataGridView控件。将DataGridView1控件的SelectionMode属性设置为FullRowSelect.
3 关键代码
3.1 总代码
Imports System.Data.SqlClient
Public Class Form1
…
End Class
3.2 具体过程
总代码里的“…”包括如下几个方面的内容。
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事件
功能是将所选中行的各单元格数据定义到对应的文本框,代码为:
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进行条件判断。
3.2.4 实现数据的添加、修改、删除
这里包含三个事件,每一个事件过程里都有共同部分:连接并打开数据库,最后更新数据源和关闭数据库。因此只在添加程序的过程里把代码写全,后面两个过程则省略。
(1)添加功能由Button1_Click事件实现
原理:在文本框里输入内容(或点击DataGridView1,使选中的行赋给各文本框后修改),后将文本框内容赋给DataGridView1的新行。详细代码如下:
Conn = New SqlConnection()
Conn.ConnectionString = "Data Source=(local);Initial Catalog=StudeintInf;" & _
"Integrated Security=false;User ID=sa;Password=sa123"
‘连接本地的数据库名称为StudentInf的文件. 以SQL Server身份登录,用户名为sa、密码为 sa123。
Conn.Open() ‘打开数据库
Dim dr As DataRow
dr = ds.Tables("mytb1").NewRow ' 在内存中创建一个空行
dr("学号") = TextBox1.Text: dr("姓名") = TextBox2.Text:
dr("语文") = TextBox3.Text: dr("数学") = TextBox4.Text: dr("英语") = TextBox5.Text
ds.Tables(“mytb1”).Rows.Add(dr) '将值赋给DataSet对象
Dim scb As New SqlCommandBuilder(da):da.Update(ds, "mytb1") ‘更新到数据库中
DataGridView1.DataSource = ds.Tables("mytb1") ‘将数据与DataGridView1绑定
Conn.Close() ‘数据库关闭
(2)修改功能由Button2_Click事件实现
原理:将需要修改的行选中,这时DataGridView1选中行的各单元格都复制到了各文本框里;经修改后,再赋给DataGridView1控件相应的行,其中主键“学号”不能修改。
关键代码:
'连接并打开数据库,代码略
Dim dr As DataRow
ds.Tables("mytb1").PrimaryKey = New DataColumn() {ds.Tables("mytb1").Columns("学号")}
'将修改行设为当前行,并利用ds.Tables("mytb1").PrimaryKey设置主键,
dr = ds.Tables("mytb1").Rows.Find(Textbox1.text)
‘因为textbox1.text中存储的学号是主键,所以利用Rows.Find(Textbox1.text)定位到要修改的行
dr("学号") = TextBox1.Text: dr("姓名") = TextBox2.Text:dr("语文") = TextBox3.Text:
dr("数学") = TextBox4.Text: dr("英语") = TextBox5.Text ‘找到当前的记录并在文本框里修改
'提交到数据库(代码略)
(3)删除功能由Button3_Click事件实现
'取出要删除的行对象
Dim delRow as _
DataRow=BiningContext(DataGridView1.DataSource,DataGridView1.DataMember).Current.Row
Delrow.Delete() ' 删除行
'提交到数据库(代码略)
4 使用UpdateCommand 和InsertCommand 属性实现DataGridView数据的添加、修改
界面设计:三个DataGridView控件,名称分别设置为DGV1、DGV2、DGV3,Dim strInsertSQL = "INSERT INTO grade(学号,姓名,语文,数学,英语) VALUES(11,'小王',98,99,100)"
Dim strSelectSQL = "SELECT * FROM grade WHERE 学号=11"
Dim strUpdateSQL = "UPDATE grade SET 语文=99,数学=88,英语=77 WHERE 学号=2015011"
Dim InsertComm As New SqlCommand(strInsertSQL, Conn) '创建Command对象
Dim SelectComm As New SqlCommand(strSelectSQL, Conn)
Dim UpdateComm As New SqlCommand(strUpdateSQL, Conn)
da = New SqlDataAdapter() '创建DataAdapter对象da
Conn.Open()
da.SelectCommand = SelectComm:da.UpdateCommand = UpdateComm:
da.InsertCommand = InsertCommds
ds= New DataSet(): da.Fill(ds, "grade1") '创建并填充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内数据的变化。顺便说明当Connection对象执行Open方法的时候,DataAdapter对象将自动调用SelectCommand属性。除了这个属性,其他3个属性都需要使用ExecuteNonQuery()方法调用(图略)。
5 结束语
DataGridView控件还有很多相关属性设置:如隐藏所选中的列或列头;是否禁止列高、行宽改变;设定列宽和行高的最小值;使用 ReadOnly 属性设定单元格是否只读;是否显示最下面的新行;设定单元格的指定背景颜色等。因此熟练掌握VB.NET的DataGridView控件运用,能轻松实现数据的浏览、添加和更新和删除。要想利用DataGridView控件设计高效、稳定的数据库管理系统还需要继续探讨和研究。而由于VB.NET具有自由开发设计通用模块的特点,使得数据库管理系统的设计越来越轻松而简单。
参考文献:
[1] 石志国,刘冀伟,张维存. VB.NET数据库编程[M].北京:清华大学出版社,2009.
[2]青岛乐合信息技术有限公司 青岛海尔软件有限公司.Web Services应用开发[M].北京:电子工业出版社,2011.
[3]余青松,江红.VB.NET 程序设计[M].北京:清华大学出版社,2011.