如题:源码
Option ExplicitPrivate recUpdate As Object ' Recordset 对象
Dim WithEvents dgdUpDate As VB.VBControlExtenderConst adVariant = &HC
Const adFldMayBeNull = &H40
Const adFldIsNullable = &H20
Const adFldUpdatable = &H4
Const adStateOpen = 1
Const dbgGridNavigation = &H2Private Sub Form_Load()
Call InitializeControls '动态加载所有控件并将其初始化.
End SubPrivate Sub Form_Unload(Cancel As Integer)
Dim C As Control
For Each C In Controls '卸载动态添加的控件
If Not (TypeOf C Is Menu) Then
Controls.Remove C
Set C = Nothing
End If
Next
Set dgdUpDate = Nothing
If Not (recUpdate Is Nothing) Then
If recUpdate.State = adStateOpen Then recUpdate.Close
Set recUpdate = Nothing
End If
End SubPrivate Sub InitializeControls() '动态加载所有控件并将其初始化.
Dim i As Integer
Licenses.Add "MSDataGridLib.DataGrid.1"
Set dgdUpDate = Controls.Add("MSDataGridLib.DataGrid.1", "dgdUpDate")
With dgdUpDate
.object.Defcolwidth = 1500
.object.Font.Size = 10
.object.HeadLines = 2
.object.RowHeight = 400
.object.Appearance = 0
.object.TabAction = dbgGridNavigation
.object.AllowUpdate = True
.Move 0, 0, 8200, 2180
Set recUpdate = CreateObject("ADODB.Recordset") '建立假绑定数据源
For i = 0 To 4 '为Recordset 5个字段,即为 DataGrid 添加 5 列
recUpdate.Fields.Append "Field" & i, adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
Next i
recUpdate.Open
For i = 0 To 3
recUpdate.AddNew '加4条记录,即为 DataGrid 添加五空行
Next i
Set .object.DataSource = recUpdate '绑定 DataGrid 的数据源
.Visible = True
End With
End Sub
Option ExplicitPrivate recUpdate As Object ' Recordset 对象
Dim WithEvents dgdUpDate As VB.VBControlExtenderConst adVariant = &HC
Const adFldMayBeNull = &H40
Const adFldIsNullable = &H20
Const adFldUpdatable = &H4
Const adStateOpen = 1
Const dbgGridNavigation = &H2Private Sub Form_Load()
Call InitializeControls '动态加载所有控件并将其初始化.
End SubPrivate Sub Form_Unload(Cancel As Integer)
Dim C As Control
For Each C In Controls '卸载动态添加的控件
If Not (TypeOf C Is Menu) Then
Controls.Remove C
Set C = Nothing
End If
Next
Set dgdUpDate = Nothing
If Not (recUpdate Is Nothing) Then
If recUpdate.State = adStateOpen Then recUpdate.Close
Set recUpdate = Nothing
End If
End SubPrivate Sub InitializeControls() '动态加载所有控件并将其初始化.
Dim i As Integer
Licenses.Add "MSDataGridLib.DataGrid.1"
Set dgdUpDate = Controls.Add("MSDataGridLib.DataGrid.1", "dgdUpDate")
With dgdUpDate
.object.Defcolwidth = 1500
.object.Font.Size = 10
.object.HeadLines = 2
.object.RowHeight = 400
.object.Appearance = 0
.object.TabAction = dbgGridNavigation
.object.AllowUpdate = True
.Move 0, 0, 8200, 2180
Set recUpdate = CreateObject("ADODB.Recordset") '建立假绑定数据源
For i = 0 To 4 '为Recordset 5个字段,即为 DataGrid 添加 5 列
recUpdate.Fields.Append "Field" & i, adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
Next i
recUpdate.Open
For i = 0 To 3
recUpdate.AddNew '加4条记录,即为 DataGrid 添加五空行
Next i
Set .object.DataSource = recUpdate '绑定 DataGrid 的数据源
.Visible = True
End With
End Sub
右击dataGrid 控件属性-->通用-->允许删除、允许更新的钩去掉
With Info
If .Name = "KeyPress" Then
If .EventParameters(0) = vbKeyEscape Then
.EventParameters(0) = 0
End If
End If
End With
End Sub
也可以解决上面的问题,但是 DataGrid 将变得不可编辑,这样整个代码失去了意义.
绿豆老大的办法是可以解决问题, 它是将 ESC 键完全拦截掉了.但我仍想保留下ESC键的一些功能,比如说在一个单元格中输入几个字符的时候,按一下ESC 键, 已经输入的几个字符就被删除了,而我只是不想删除一整行.我现在还没有解决的办法.
修改后的程序是:Option ExplicitPrivate recUpdate As Object ' Recordset 对象
Dim WithEvents dgdUpDate As VB.VBControlExtender
Const adLockPessimistic = &H2
Const adOpenDynamic = 2
Const adUseClient = 3Const adVariant = &HC
Const adFldMayBeNull = &H40
Const adFldIsNullable = &H20
Const adFldUpdatable = &H4
Const adStateOpen = 1
Const dbgGridNavigation = &H2Private Sub Form_Load()
Call InitializeControls '动态加载所有控件并将其初始化.
End SubPrivate Sub Form_Unload(Cancel As Integer)
Dim C As Control
For Each C In Controls '卸载动态添加的控件
If Not (TypeOf C Is Menu) Then
Controls.Remove C
Set C = Nothing
End If
Next
Set dgdUpDate = Nothing
If Not (recUpdate Is Nothing) Then
If recUpdate.State = adStateOpen Then recUpdate.Close
Set recUpdate = Nothing
End If
End SubPrivate Sub InitializeControls() '动态加载所有控件并将其初始化.
Dim i As Integer
Licenses.Add "MSDataGridLib.DataGrid.1"
Set dgdUpDate = Controls.Add("MSDataGridLib.DataGrid.1", "dgdUpDate")
With dgdUpDate
.object.Defcolwidth = 1500
.object.Font.Size = 10
.object.HeadLines = 2
.object.RowHeight = 400
.object.Appearance = 0
.object.TabAction = dbgGridNavigation
.object.AllowUpdate = True
.Move 0, 0, 8200, 2180
Set recUpdate = CreateObject("ADODB.Recordset") '建立假绑定数据源
For i = 0 To 4 '为Recordset 5个字段,即为 DataGrid 添加 5 列
recUpdate.Fields.Append "Field" & i, adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
Next i
With recUpdate
.CursorType = adOpenDynamic
.LockType = adLockPessimistic
.CursorLocation = adUseClient '使用客户端游标!
'以上三句加后面一句 : recUpdate.MoveFirst 解决了反复按压ESC键 DataGrid 会删除未尾一整行的问题!
.Open
End With
For i = 0 To 3
recUpdate.AddNew '加4条记录,即为 DataGrid 添加五空行
Next i
Set .object.DataSource = recUpdate '绑定 DataGrid 的数据源
recUpdate.MoveFirst
.Visible = True
End With
End Sub