[VB基础]DBGrid的用法集锦_ZT

本文围绕VB中DBGrid控件展开,介绍了修改列标题、显示过滤数据、控制内容修改、设置日期格式和列宽等使用技巧,还涉及与事务联合使用、追加数据、添加计算字段、控制点击头事件等方面,给出了相应代码示例。
部署运行你感兴趣的模型镜像

原贴见:清溪论坛http://scwy.net/bbs/dispbbs.asp?boardid=40&id=11175

1、如何修改DBGrid的列标题
可以使用Select语句指定标题,如:
Select f1 As [姓名] From db
但是这种方法有毛病,因为VB认为使用了As后,数据库就变成只读的了。
比较好的办法是利用DBGrid的Column的Caption,如:
DBGrid1.Columns(1).Caption = "姓名"


2、怎样把过滤过的数据在DBGRID上显示出来
下面是大致的代码:
Private Sub cmdFilter_Click()
On Error GoTo FilterErr
Dim recRecordset1 As Recordset, recRecordset2 As Recordset
Dim sFilterStr As String
If Data1.RecordsetType = vbRSTypeTable Then
Beep
MsgBox "不能过滤表记录集!", 48
Exit Sub
End If
Set recRecordset1 = Data1.Recordset '复制记录集
sFilterStr = InputBox("输入过滤器表达式:")
If Len(sFilterStr) = 0 Then Exit Sub
Screen.MousePointer = vbHourglass
recRecordset1.Filter = sFilterStr
Set recRecordset2 = recRecordset1.OpenRecordset(recRecordset1.Type) '建立过滤器
Set Data1.Recordset = recRecordset2 '赋值为初始记录集对象
Screen.MousePointer = vbDefault
Exit Sub
FilterErr:
Screen.MousePointer = vbDefault
MsgBox "错误:" & Err & "," & Err.Description
End Sub

如何控制DBGRID的内容不被修改
使用下面几种方法中的任何一种都可以:
1、设置DBGrid的AllowUpdate属性为False。
2、把同DBGrid关联的Data控件的RecordsetType改为SnapShot

4、如何使DBGrid的某一列数据的修改不存入数据库
DBGrid有一个事件BeforeColUpdate,其语法如下:
Private Sub object_BeforeColUpdate ([ index As Integer,] colindex As Integer, oldvalue As Variant, cancel As Integer)
其中colindex是列号,如果cancel为False就允许更新数据库,如果为True就不允许更新数据库,把焦点保留在控件上。

5、如何在DBGrid中取消对记录的修改
在DBGrid_Error事件中增加Response = 0这一句:
Private Sub DBGrid1_Error(ByVal DataError As Integer, Response As Integer)
Response = 0
End Sub
默认Response = 1,表示显示错误信息,Response = 0表示不显示错误信息

6、如何修改DBGRID控件显示的日期格式
可以修改列的NumberFormat,设计时或运行时修改都可以:
DBGrid1.Columns(1).NumberFormat = "long date"
7、如何设置DBGrid列的宽度
使用DBGrid1.Columns(i).Width可以设置宽度

8、在DBGRID控件中选定一行后,如何获得此行中的数据
Private Sub DBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
If Val(LastRow) <> DBGrid1.Row Then
Text1.Text = Data1.Recordset("Name")
End If
End Sub

9、DBGrid控件中如何在属性中设定表格显示时的列数
如果是在设计时,可以先在Data控件中设置好,然后右击DBGrid,在快捷菜单上选择Retrieve Fields,这时DBGrid会根据Data控件来修改列数。如果你日后修改了Data控件的RecordSource属性,但没有使用Retrieve Fields,DBGrid列数将不变化。
你也可以在运行时使用Columns集合修改表格显示的列数。比如,下面的语句加入一列:
' Create a new Column 0
DBGrid1.Columns.Add 0
' Make it visible
DBGrid1.Columns(0).Visible = True
' Set the column's database field
DBGrid1.Columns(0).DataField = "LAST"
' Set the column's caption
DBGrid1.Columns(0).Caption = "Last Name"

10、如何检测DBGrid的焦点移动和移动焦点
可以在RowColChange事件中放置代码,发现用户移动到第二列就提供相应的选择。可以使用SelEndCol、SelStartCol、SelEndRow和SelStartRow属性来改变当前选择的单元。

11、DBGrid和事务的联合使用
1) DBGRID 直接进行数据录入时,由于其本身的限制(缺乏必要的检测 如单元格检测),因此需要自行做很多控制.建议考虑其他方法。
(2) 事务的处理. 在数据量较大时,将保存的过程尽可能简化,然后套上事务,会大大加快保存的效率.下面以 VB6 为例 使用ADO,SQL7
比如说生成一个表的过程,可从服务器返回一个空的结果集
Example: " Select * from table1 where 1=0"
然后是
On Error Goto Errhandle
...
BeginTrans
AddNew
字段赋值过程
...
Update
CommitTrans
...
Exit sub
Errhandle:
RollBack
与 Data 控件绑定时,事务最好是紧跟着保存操作,而不要在某个函数里调保存的函数,这样执行 "Data1.refresh"时就不会有问题了。
以上意见仅供参考。

12、如何才能向非绑定DBGrid控制追加数据
如果要想让最终用户追加数据,可以将AllowAddNew属性设为True,这样在表的最后一行会出现一个空白行,用户可以在此追加数据。
如果要想在程序中修改行数,可以使用Refresh方法,这样DBGrid控制放弃当前数据,重新调用UnboundReadData事件读取数据,借机可以追加数据。
13、如何给DBGrid控件添加一个非绑定的计算字段
这个问题相当麻烦。如果你要加修改Data控件的RecordSource为
Select [销售额], [销售额]*0.07 ... From ...
虽然可以显示这个计算字段,但就不能修改任何记录了,因为VB认为只要Select语句中出现计算字段就为只读的了。当然,你可以使用非绑定方式,但这样做程序工作量比较大。

14、怎样控制DBGrid控件的点击头事件
在用户单击一个 DBGrid 控件指定列的标题时,会发生HeadClick事件。该事件的语法为:
Private Sub object_HeadClick ([ index As Integer,] colindex As Integer)


其中colindex参数就是用户点击的列的索引值,利用这个值和Columns属性配合使用就可以知道用户点击的是哪一个字段。下面给出一个例子,在这个例子中,用户点击某个列的标题之后,DBGrid就按那个列进行排序。
首先,在窗体上放置一个Data控件和一个DBGrid控件。
然后,将Data控件的数据库设置为VB目录下的Biblio.mdb,将RecordSource设置为Publishers。将DBGrid控件的DataSource属性设置为Data1。
最后,输入以下代码:

Private Sub DBGrid1_HeadClick(ByVal ColIndex As Integer)
Data1.RecordSource = "Select * From Publishers Order By [" & _
DBGrid1.Columns(ColIndex).DataField + "]"
Data1.Refresh
End Sub

这样运行程序就可以看到排序的效果了。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

reprint 使用说明 本人长期使用delphi做数据库的开发,报表控件使用Quickrpt,在打印上经常遇到一些问题,于是自己经常编写一部分打印的程序,经过总结开发了这个控件。 本控件可打印 datasource,dbgrid,stringgrid. 一 、控件属性: 1、colstitle 设置报表的列标题属性 (1)alignment 列标题对齐方式。 (2)font 列标题字体 (3)print 设置是否打印列标题 (4)rowspace 列标题行的高度 2、datasource 选择要打印的datasource 3、dbgrid 选择要打印的dbgrid 4、stringgrid 选择要打印的stringgrid 5、detail 设置要打印的明细数据属性 (1)arrange 设置明细字段排列方向 Horizontal 横向打印(默认的一般打印) Vertical 竖向打印(字段竖向排列适合打印字段内容较长的报表如“会议纪录”) (2)aotureturn 打印明细字段时,如果字段超过列的宽度是否允许自动换行 (3)colsline 设置竖线属性引用tpen类 (4)footer 设置明细尾 (5)frame 设置明细边框属性引用tpen类 (6)head 设置明细头同footer (7)rowsline 设置横线属性引用tpen类 (8)rowspace 设置明细行的高度 (9)top 明细与标题的距离 6、page 设置纸张的上下左右边距 7、pagefooter 设置页脚同明细尾 8、pageheader 设置页眉同页脚 9、printobject 选择要打印的对象 (datasource 、dbgridstringgrid ) 10、title 设置标题类页眉、页脚 二 、控件方法: (1) preview 预览 (2) print 打印 (3) SaveToFile() 保存为报表文件 (4) SaveToStream() 保存为流(然后就可把整个报表存到数据库了很方便哦! ~_~) (5) PrintFile() 打印报表文件 (6) PrintStream() 打印流(流的数据库存取就不用多说了吧) (7) PreviewFile() 预览文件 (8) PreviewStream() 预览流 (9) OptionToStream() 报表的属性保存为流 (10) OptionFromStream() 从流中得到报表属性 三、 控件事件: AfterPrint 打印后 BeforePrint 打印前 (本来很多事件,但没有预览,后来加上预览以及一些方法后实现很困难就去掉了!) 四、注意事项 (1) text 属性,输入“&brvbar;;;;;;;;#&brvbar;;;;;;;;”打印页码值,如果想打印页码可输入“第&brvbar;;;;;;;;#&brvbar;;;;;;;;页” 输入“&brvbar;;;;;;;;RecordCount&brvbar;;;;;;;;”打印 记录数 (2) 不同的打印机,打印和预览效果可能有一点点不同(保证数据打印完全正确一致)。本人用一台针式和一台激光打印机做测试,开始差别较大后经过调试基本一致,不知其他打印机如何。 就这些个吧基本满足了我的软件开发需要,解决了很多问题,关键是做报表省了很大力气,当然了很复杂的报表还是要其它报表控件来解决。如果有其他问题或好的建议可与我联系。 程序设计:吴进昊 E-mail :jinhaowu@hotmail.com qq :54254770 2003.01.03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值