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

原贴见:清溪论坛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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值