通过DataGridView控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。
将数据绑定到 DataGridView 控件非常简单和直观,在大多数情况下,只需设置 DataSource 属性即可。在绑定到包含多个列表或表的数据源时,只需将DataMember 属性设置为指定要绑定的列表或表的字符串即可。
DataGridView控件具有极高的可配置性和可扩展性,它提供有大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当需要在 Windows 窗体应用程序中显示表格数据时,请首先考虑使用 DataGridView控件,然后再考虑使用其他控件(例如 DataGrid)。若要以小型网格显示只读值,或者若要使用户能够编辑具有数百万条记录的表,DataGridView 控件将为您提供可以方便地进行编程以及有效地利用内存的解决方案。
二、DataGridView的特性
下表着重显示了DataGridView的主要特性,稍后会介绍它们的详细信息。
DataGridView控件特性 |
描述 |
多种列类型 |
DataGridView提供有TextBox、CheckBox、Image、Button、ComboBox和Link类型的列及相应的单元格类型。
|
多种数据显示方式 |
DataGrid仅限于显示外部数据源的数据。而DataGridView则能够显示非绑定的数据,绑定的数据源,或者同时显示绑定和非绑定的数据。你也可以在DataGridView中实现virtual mode,实现自定义的数据管理。
|
自定义数据的显示和操作的多种方式 |
DataGridView提供了很多属性和事件,用于数据的格式化和显示。 此外,DataGridView提供了操作数据的多种方式,比如,你可以: 对数据排序,并显示相应的排序符号(带方向的箭头表示升降序) 对行、列和单元格的多种选择模式;多项选择和单项选择 以多种格式将数据拷贝到剪贴板,包括text,CSV (以逗号隔开的值) 和 HTML 改变用户编辑单元格内容的方式
|
用于更改单元格、行、列、表头外观和行为的多个选项 |
DataGridView使你能够以多种方式操作单个网格组件。比如,你可以: 冻结行和列,避免它们因滚动而不可见; 隐藏行、列、表头; 改变行、列、表头尺寸的调整方式; 改变用户对行、列、单元格的选择模式; 为单个的单元格、行和列提供工具提示(ToolTip)和快捷菜单。 自定义单元格、行和列的边框样式。
|
提供丰富的可扩展性的支持 |
DataGridView提供易于对网格进行扩展和自定义的基础结构,比如: 处理自定义的绘制事件可以为单元格、列和行提供自定义的观感; 继承一个内置的单元格类型以为其提供更多的行为; 实现自定义的接口以提供新的编辑体验。 |
三、举例机房收费系统
(效果图1)
U层
Private Sub btnInquire_Click(sender As Object, e As EventArgs) Handles btnInquire.Click
'定义InquireUser实体()
Dim InquireUser As New Entity.LineE
'定义TableInfo作为一个新的表格
Dim TableInfo As New DataTable
Dim UserInfo As New BLL.SttseeredBLL
InquireUser.cardno = Trim(txtCard.Text)
'U层调用B层的方法
TableInfo = UserInfo.QueryUser(InquireUser)
'判断如果表中没有数据则提示,有数据则会添加信息
If TableInfo.Rows.Count = 0 Then
MsgBox("没有记录", , "提示")
Else
'设置列宽
DataGridView1.Columns.Clear()
DataGridView1.DataSource = TableInfo
'DataGridView1.Columns(5).Width = 300
'DataGridView1.Columns(6).Width = 150
'添加表头()
'设置标题第0列()
DataGridView1.Columns(0).HeaderText = "序列号"
'冻结标题 也就是标题不会随着数据的移动而消失
DataGridView1.Columns(0).Frozen = True
DataGridView1.Columns(1).HeaderText = "卡号"
DataGridView1.Columns(1).Frozen = True
DataGridView1.Columns(2).HeaderText = "学号"
DataGridView1.Columns(2).Frozen = True
DataGridView1.Columns(3).HeaderText = "姓名"
DataGridView1.Columns(3).Frozen = True
DataGridView1.Columns(4).HeaderText = "系"
DataGridView1.Columns(4).Frozen = True
DataGridView1.Columns(5).HeaderText = "性别"
DataGridView1.Columns(5).Frozen = True
DataGridView1.Columns(6).HeaderText = "上机日期"
DataGridView1.Columns(6).Frozen = True
DataGridView1.Columns(7).HeaderText = "上机时间"
DataGridView1.Columns(7).Frozen = True
DataGridView1.Columns(8).HeaderText = "下机日期"
DataGridView1.Columns(8).Frozen = True
DataGridView1.Columns(9).HeaderText = "下机时间"
DataGridView1.Columns(9).Frozen = True
End If
Function QueryUser(ByVal enUser As Entity.LineE) As DataTable
Dim tableInfo As New DataTable
Dim QueryUserInfo As New DAL.LineDAL
'B层掉用户D层的方法
tableInfo = QueryUserInfo.QueryUser(enUser)
'返回表格
Return tableInfo
End Function
Public Function QueryUser(ByVal enUser As Entity.LineE) As DataTable
Dim strSqlstring1 As String
strSqlstring1 = "select * from Line_Info where cardno='" & enUser.cardno & "'"
Dim seting As String
seting = str_SqlConnection
Dim MyConn As SqlConnection
MyConn = New SqlConnection(seting)
Dim MyCmd As SqlCommand
MyCmd = New SqlCommand(strSqlstring1, MyConn)
MyConn.Open()
'定义一个Da用于检索和保存数据
Dim Da As New SqlDataAdapter
Da.SelectCommand = MyCmd
'创建Da作为Datatable数据集合实例
Dim Datable As New DataTable
'填充数据集
Da.Fill(Datable)
Return Datable
四、导出Excel表格
(效果图2)
导出Excel的代码实现:
rivate Sub btnOutput_Click(sender As Object, e As EventArgs) Handles btnOutput.Click
Dim xlApp, xlBook, xlSheet As Object
xlApp = CreateObject("Excel.Application")
xlBook = xlApp.Workbooks.Add
xlSheet = xlBook.Worksheets(1)
Dim rowindex, colindex As Integer
rowindex = 1 '行
colindex = 0 '列
'打开sheet1那页
xlSheet = xlApp.Worksheets("sheet1")
Dim a As New DataSet
Dim table As New System.Data.DataTable
table = DataGridView1.DataSource
'定义row为表格的行
Dim row As DataRow
'定义从来为表格的列
Dim col As DataColumn
'把表格的每一列写EXCEL去
For Each col In table.Columns
colindex = colindex + 1
xlApp.Cells(1, colindex) = col.ColumnName
Next
'把表格的每一行写到EXCEL去
For Each row In table.Rows
rowindex = rowindex + 1
colindex = 0
For Each col In table.Columns
colindex = colindex + 1
xlApp.Cells(rowindex, colindex) = row(col.ColumnName)
Next
Next
xlApp.Visible = True
End Sub
以上是我对DataGridView的使用和导出Excel表格的学习,如有出入,请你谅解。