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控件的使用技巧相关推荐

  1. WPF中DataGrid控件

    WPF中DataGrid控件的个别属性使用 //设置不可自动拉伸宽度dataGrid.CanUserResizeColumns = false;//第一列不可见dataGrid.HeadersVisi ...

  2. C#中DataGrid控件的基本使用

    datagrid控件的作用简单点说就是将表格显示出来,用的多的是直接链接数据库文件,也可以自己见一个表格对象,链接到datagrid控件,下面是一个简单的例子 1 //xinjiabiao 2 Dat ...

  3. WPF 中DataGrid控件显示和设置数据

    一.基础知识 1.DataGrid控件:用来显示数据的控件,从对象集合中获取信息并在具有行和单元格的网格中显示信息.每行和单独的对象相对应,并且每列和对象的某个属性相对应. 2.在DataGrid 中 ...

  4. 有关WPF中DataGrid控件的基础应用总结

    基础说明 DataGrid是WPF提供的基础控件,它可以非常轻松的呈现出一张表格,本文章会按照从易到难的顺序依次将DataGrid的使用方法进行解说,除了MSDN上给出的最基本的例子之外,给出了三个比 ...

  5. EasyUI中datagrid控件的使用 设置多行表头(两行或多行)

    EasyUI中的datagrid控件十分强大,能生成各种复杂的报表,现在因为项目需要,需要生成一个表头两行的表,找了一些说明文档,以下用一个实例来说明一下: 第一种方法: 1 $('#divData' ...

  6. Asp.net中DataGrid控件的自定义分页

    使用实现起来虽然比较方便,但是效率不高,每次都需要读取所有页(整个记录集),而加载的只是其中一页,造成了资源的浪费,记录多又会使效率变得很低.下面通过DataGrid的自定义分页功能来减少资源使用和提 ...

  7. Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示

    定义依赖属性作为datagrid的数据源 protected static readonly DependencyProperty ViewLogsProperty = DependencyPrope ...

  8. vb的datagrid控件的使用(一)

    vb的datagrid控件的使用(一) 时间:2007-05-05 使用 DataGrid 控件 DataGrid 控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示 Recordset ...

  9. asp.net中显示DataGrid控件列序号的几种方法

    在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值 ...

最新文章

  1. 学习MongoDB (1) :配置安装
  2. 深度学习会议论文不好找?这个ConfTube网站全都有
  3. 牛津大学最新《计算代数拓扑》笔记书
  4. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)
  5. extjs中js资源缓存策略
  6. java windows7 环境变量_Windows7环境变量中,系统变量与用户变量的优先级
  7. kido机器人用流量吗_国脉电信200元天网卡,交1700流量无线用,拉人加入还会有不错的收益,你信吗?反正我是不信!...
  8. java三判式,Java编程设计模式,第 3 部分
  9. linux中对shell变量内容的修改和替换
  10. 沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生
  11. POJ 1625 Censored!(自动机DP+高精度)
  12. 直线/曲线检测:Randon变换与Hough变换
  13. NewCoder:买苹果
  14. Vue面试题你学会多少
  15. 负载均衡之跑马竞赛算法
  16. 哥们别逗 了,写个脚本那真不叫运维自动化! 【转载】
  17. spring事务 调用同类方法,同类方法要事务不生效怎么办
  18. 实习与就业--软件外包公司(一)
  19. 为什么大厂一边裁员,一边招聘?
  20. 计算机程序的输入时占用cpu吗,计算机系统中有多种实现数据输入和输出的控制方式,其中占用CPU时间最多的是()。 - 信管网...

热门文章

  1. Intel 编译器更新licence
  2. mt7620a上带机量的提高(一)
  3. kawamura+maya+picture_zbrush+powermill+mach3+cnc=mydream
  4. python:转义符\
  5. ImageNet1K的下载与使用
  6. Flink Parallelism 和 Slot 深度理解
  7. 检查cad检查线压盖lisp_在CAD中对多段线进行拓扑检查
  8. 华为 eNSP 模拟器配置动态路由(RIP)
  9. USB 3.0协议理解
  10. 利用VcOutPut.sh检查QE vc-relax优化情况