VB.net数据库编程中DataGrid控件的使用技巧
VB.net数据库编程中DataGrid控件的使用技巧
如何用同一个DataGrid显示不同的数据表;如何用DataGrid显示主表/明细表的内容;如何用DataGrid分页显示或编辑数据表的记录。这些技巧在开发数据库程序中很实用。
DataGrid是VB.NET中重要的数据感知控件,它不仅可以把数据库的记录以表格形式显示出来,而且可以表格形式编辑数据库的记录,所以,它在数据库编程中应用非常广泛。那么,在VB.NET数据库编程中DataGrid控件有哪些使用技巧呢?这就是我今天要谈的内容。
1、用同一个DataGrid分别显示不同的数据表
通过动态指定DataGrid的数据源就可以把一个(或多个)数据库中的多个数据表按需要显示在DataGrid中。
在图1、图2中所显示的就是这种情况。在这个实例中,使用的是student.mdb数据库,该数据库中的三个表分别是T_Stu(学生表)、T_Course(课程表)、T_Mark(成绩表)。由于有三个数据表,所以要在窗体上添加三个数据适配器,我们把这分别命名为daStu、daCourse、daMark,每个数据适配器可以连接到数据库中的一个数据,然后生成一个数据集(这 图1 里命名为 ds),数据集中有上述三个数据表。
接着就要编写代码来实现程序的功能。程序代码如下图
把上面程序中的 daCourse.Fill(ds, "T_Course")和 DataGrid1.DataMember = "T_Course"分别修改为daCourse.Fill(ds, "T_Course")和DataGrid1.SetDataBinding(ds, "T_Course")其功能是一样的。
实际上,我们还可以直接利用DataGrid控件显示多个数据表的功能来达到我们的要求。程序代码如下图
单击“加载”命令程序运行结果如下图2
二、用DataGrid显示主表/明细表的内容
左下图所示为程序运行结果的主从表内容。这二个表中有一个字段是相同的。这种情况下,当你在第一个DataGrid中单击任何一条记录,则在下面的第二个DataGrid中显示其对应的详细情况。
在这里,我们使用的数据表是MSSQL Server 2008中的northwind数据库中的orders和orderdetails。由于有二个数据表,所以使用了二个数据适配器daorders和daorderdetails。当数据集生成之后,请在数据上展开“+”会显示orderdetails表。这里要注意要,一定要建立二表的关系;用代码建,代码如下
ds.Relations.Add("order_details",ds.Tables("orders").Columns("orderid"), ds.Tables("orderdetails").Columns("orderid"))
ds.relations.add(参数一,参数二,参数三)
参数一为自定义的关系明,参数二为数据集中主表的主键的列,参数三为明细表参照主表的外键列。程序代码如下:
三、分页显示或编辑数据表的记录。
用VB.NET程序还可以控制DataGrid分页浏览或编辑数据库记录。这是一个非常实用的功能。不过我们首先要明白,Windows窗体中的DataGrid控件本身不具有分页显示的功能,但我们可以控制它在一个页面中显示记录的条数,从而实现分页显示或编辑功能。
程序运行界面如下图。
要实现这个功能最关键的是要掌握数据适配器的Fill方法的用法,其基本用法是:
数据适配器.Fill(数据集,开始记录,要显示的记录条数,数据表)。
“开始记录”是从0开始显示数据表customers的前5条记录,则可以用下面的程序实现:
程序功能代码如下:
Imports System.Data.SqlClient
Imports System.Data
Public Class Form1
Dim con As New SqlConnection("datasource=localhost;initial catalog=northwind;user id=sa;password=123")
Dim da As New SqlDataAdapter("select* from customers", con)
Dim ds As New DataSet()
DimcurrentIndex As Integer'当前页首条记录的序列数,第一页从0开始
Public Const pageSize As Integer = 5 '每页显示的记录数
Dim w As Integer '总页数
Private Sub dsFill()
ds.Clear()
da.Fill(ds, currentIndex, pageSize, "customers")
DataGrid1.DataMember = "customers"
End Sub
Private Sub Form1_Load(sender AsObject, e AsSystem.EventArgs) HandlesMe.Load
currentIndex = 0
Dim n As Integer '总记录数
con.Open()
ds.Clear()
DataGrid1.DataSource = ds
da.Fill(ds, "customers")
DataGrid1.DataMember = "customers"
n = ds.Tables(0).Rows.Count
If(Int((n) / pageSize)) = n / pageSize Then '如果整除
w = Int(n / pageSize)
Else
w = Int(n / pageSize) + 1
End If
Label1.Text = "请输入页码,页码数大于1小于" & w
btnBefor.Enabled = False
dsFill()
con.Close()
End Sub
Private Sub btnNext_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesbtnNext.Click
btnBefor.Enabled = True
btnFirst.Enabled = True
IfcurrentIndex < (w - 1) * pageSize Then
currentIndex = currentIndex +pageSize
btnLast.Enabled = True
Else
currentIndex = (w - 1) * pageSize
btnLast.Enabled = False
btnNext.Enabled = False
End If
dsFill()
End Sub
Private Sub btnBefor_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesbtnBefor.Click
btnBefor.Enabled = True
btnLast.Enabled = True
IfcurrentIndex = 0 Then
btnBefor.Enabled = False
Else
currentIndex = currentIndex -pageSize
End If
dsFill()
End Sub
Private Sub btnShow_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesbtnShow.Click
Dim x As Integer '定义用户在文本框中输入的页码
x = Val(TextBox1.Text)
If x>= 1 And x <= w Then
currentIndex = (x - 1) * pageSize
dsFill()
Else
MsgBox("你输入的页码必须在1和" & w & "之间")
End If
End Sub
Private Sub btnFirst_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesbtnFirst.Click
currentIndex = 0
btnBefor.Enabled = False
btnFirst.Enabled = False
btnLast.Enabled = True
btnNext.Enabled = True
dsFill()
End Sub
Private Sub btnLast_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesbtnLast.Click
currentIndex = (w - 1) * pageSize
btnLast.Enabled = False
btnNext.Enabled = False
btnFirst.Enabled = True
btnBefor.Enabled = True
dsFill()
End Sub
Private Sub btnQuit_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesbtnQuit.Click
con.Dispose()
End
End Sub
Private Sub btnOk_Click(sender AsSystem.Object, e AsSystem.EventArgs) HandlesbtnOk.Click
'''DimsqlComd As New SqlCommand
'da.Update(ds,"customers")
'MessageBox.Show("数据更新已完成")
End Sub
End Class
到此处数据更新功能未能实现,待续……
VB.net数据库编程中DataGrid控件的使用技巧相关推荐
- WPF中DataGrid控件
WPF中DataGrid控件的个别属性使用 //设置不可自动拉伸宽度dataGrid.CanUserResizeColumns = false;//第一列不可见dataGrid.HeadersVisi ...
- C#中DataGrid控件的基本使用
datagrid控件的作用简单点说就是将表格显示出来,用的多的是直接链接数据库文件,也可以自己见一个表格对象,链接到datagrid控件,下面是一个简单的例子 1 //xinjiabiao 2 Dat ...
- WPF 中DataGrid控件显示和设置数据
一.基础知识 1.DataGrid控件:用来显示数据的控件,从对象集合中获取信息并在具有行和单元格的网格中显示信息.每行和单独的对象相对应,并且每列和对象的某个属性相对应. 2.在DataGrid 中 ...
- 有关WPF中DataGrid控件的基础应用总结
基础说明 DataGrid是WPF提供的基础控件,它可以非常轻松的呈现出一张表格,本文章会按照从易到难的顺序依次将DataGrid的使用方法进行解说,除了MSDN上给出的最基本的例子之外,给出了三个比 ...
- EasyUI中datagrid控件的使用 设置多行表头(两行或多行)
EasyUI中的datagrid控件十分强大,能生成各种复杂的报表,现在因为项目需要,需要生成一个表头两行的表,找了一些说明文档,以下用一个实例来说明一下: 第一种方法: 1 $('#divData' ...
- Asp.net中DataGrid控件的自定义分页
使用实现起来虽然比较方便,但是效率不高,每次都需要读取所有页(整个记录集),而加载的只是其中一页,造成了资源的浪费,记录多又会使效率变得很低.下面通过DataGrid的自定义分页功能来减少资源使用和提 ...
- Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示
定义依赖属性作为datagrid的数据源 protected static readonly DependencyProperty ViewLogsProperty = DependencyPrope ...
- vb的datagrid控件的使用(一)
vb的datagrid控件的使用(一) 时间:2007-05-05 使用 DataGrid 控件 DataGrid 控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示 Recordset ...
- asp.net中显示DataGrid控件列序号的几种方法
在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值 ...
最新文章
- 学习MongoDB (1) :配置安装
- 深度学习会议论文不好找?这个ConfTube网站全都有
- 牛津大学最新《计算代数拓扑》笔记书
- 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)
- extjs中js资源缓存策略
- java windows7 环境变量_Windows7环境变量中,系统变量与用户变量的优先级
- kido机器人用流量吗_国脉电信200元天网卡,交1700流量无线用,拉人加入还会有不错的收益,你信吗?反正我是不信!...
- java三判式,Java编程设计模式,第 3 部分
- linux中对shell变量内容的修改和替换
- 沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生
- POJ 1625 Censored!(自动机DP+高精度)
- 直线/曲线检测:Randon变换与Hough变换
- NewCoder:买苹果
- Vue面试题你学会多少
- 负载均衡之跑马竞赛算法
- 哥们别逗 了,写个脚本那真不叫运维自动化! 【转载】
- spring事务 调用同类方法,同类方法要事务不生效怎么办
- 实习与就业--软件外包公司(一)
- 为什么大厂一边裁员,一边招聘?
- 计算机程序的输入时占用cpu吗,计算机系统中有多种实现数据输入和输出的控制方式,其中占用CPU时间最多的是()。 - 信管网...
热门文章
- Intel 编译器更新licence
- mt7620a上带机量的提高(一)
- kawamura+maya+picture_zbrush+powermill+mach3+cnc=mydream
- python:转义符\
- ImageNet1K的下载与使用
- Flink Parallelism 和 Slot 深度理解
- 检查cad检查线压盖lisp_在CAD中对多段线进行拓扑检查
- 华为 eNSP 模拟器配置动态路由(RIP)
- USB 3.0协议理解
- 利用VcOutPut.sh检查QE vc-relax优化情况