我是用adodb动态绑定数据库,但是数据库中的布尔类型在datagrid中显示为数字,怎么才能也让他先是为checkbox?并且可以让用户选择或取消选择。
我试过DataGrid1.Columns(10).NumberFormat = "CheckBox",但是显示出来的是0:00:000后面是一个checkbox,不知道正确的方法是什么啊?
望各位大虾指点!
我试过DataGrid1.Columns(10).NumberFormat = "CheckBox",但是显示出来的是0:00:000后面是一个checkbox,不知道正确的方法是什么啊?
望各位大虾指点!
datagrid是不拥有这个属性的
我刚好在最近实现了这个功能:
'先加一个CheckBox放在窗体上,然后设背景为白色
Dim adoRecordset As ADODB.Recordset
Const dY = 20
Const dX = 10
Const WdX = 8
Const HdY = 10
Private Sub Check1_LostFocus()
Check1.Visible = False
End Sub
Private Sub CommandButton1_Click()
End Sub
Private Sub DataGrid1_Click()
On Error Resume Next
If Not Check1.Visible Then
Check1.Move DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left + dX, DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) + dY, DataGrid1.Columns(DataGrid1.Col).Width - WdX
Check1.DataField = adoRecordset.Fields.Item(DataGrid1.Col).Name
Check1.Visible = True
'Check1.SetFocus
End If
End Sub
Private Sub DataGrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer)
On Error Resume Next
'Check1.Width = DataGrid1.Columns(DataGrid1.Col).Width - wdX
'Check1.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left + dX
'Check1.Top = DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) + dY
'Check1.Move DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left + dX, DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) + dY, DataGrid1.Columns(DataGrid1.Col).Width - WdX
Check1.Visible = False
'Dim temp As Long
'For i = 0 To DataGrid1.Columns.Count - 1
' temp = temp + DataGrid1.Columns.Item(i).Width
'Next i
If DataGrid1.Columns.Item(DataGrid1.Columns.Count - 1).Left + DataGrid1.Columns.Item(DataGrid1.Columns.Count - 1).Width >= DataGrid1.Width - 270 Then
Command3.Visible = True
Else
Command3.Visible = False
End If
End Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
'Check1.Width = DataGrid1.Columns(DataGrid1.Col).Width - wdX
'Check1.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left + dX
'Check1.Top = DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) + dY
On Error Resume Next
Check1.Move DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left + dX, DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) + dY, DataGrid1.Columns(DataGrid1.Col).Width - WdX
Check1.DataField = adoRecordset.Fields.Item(DataGrid1.Col).Name
Check1.Visible = True
'Check1.SetFocus End Sub Private Sub DataGrid1_Scroll(Cancel As Integer)
Check1.Visible = False
End Sub
Private Sub DataGrid1_SplitChange()
'Check1.Visible = False
End Sub Private Sub Form_Load()
Set adoRecordset = New ADODB.Recordset '测试用记录集
For i = 0 To 3
adoRecordset.Fields.Append "fld" & i, adBoolean
Next i
adoRecordset.Open
Dim b As Boolean
For i = 0 To 10
b = Not (b)
adoRecordset.AddNew Array("fld0", "fld1", "fld2", "fld3"), Array(b, Not b, b, Not b)
Next i
Set DataGrid1.DataSource = adoRecordset
DataGrid1.RowHeight = Check1.Height
DataGrid1.AllowRowSizing = False
DataGrid1.AllowUpdate = False
Check1.Visible = False
Set Check1.DataSource = adoRecordset
Dim bFmt1 As New StdDataFormat
Dim bFmt2 As New StdDataFormat
Dim bFmt3 As New StdDataFormat
bFmt1.Type = fmtBoolean
bFmt1.TrueValue = "√"
bFmt1.FalseValue = "×"
Set DataGrid1.Columns(0).DataFormat = bFmt1
bFmt2.Type = fmtBoolean
bFmt2.TrueValue = "True" '"√"
bFmt2.FalseValue = "False" '" ×"
Set DataGrid1.Columns(1).DataFormat = bFmt2
bFmt3.Type = fmtBoolean
bFmt3.TrueValue = "是" '"√"
bFmt3.FalseValue = "否" '" ×"
Set DataGrid1.Columns(2).DataFormat = bFmt3
DataGrid1.MarqueeStyle = dbgHighlightCell
'DisableDataGridSplit DataGrid1, Command3
End Sub