我是用adodb动态绑定数据库,但是数据库中的布尔类型在datagrid中显示为数字,怎么才能也让他先是为checkbox?并且可以让用户选择或取消选择。
我试过DataGrid1.Columns(10).NumberFormat = "CheckBox",但是显示出来的是0:00:000后面是一个checkbox,不知道正确的方法是什么啊?
望各位大虾指点!

解决方案 »

  1.   

    NumberFormat 属性只是设置数值的显示格式的.不能设置为CheckBox样式.datagrid控件没有显示CheckBox的功能.如果你想有那样的功能就换个控件吧,比如VSFlexGrid
      

  2.   

    但是我看到在datagrid控件的属性——>格式的格式类型里面有复选框这个选项的啊,难道不能用吗?
      

  3.   

    如果是checkbox建议使用flexgrid或者spread完成
    datagrid是不拥有这个属性的
      

  4.   

    不过在DataGrid中也可以用其他方式体现出来的。如True时显示“√”False时不显示不也就一样了。
      

  5.   

    这是一个误区,这个选项代表是以ChcekBox的值做为Boolean型的表现,而并非是控件的表现.
    我刚好在最近实现了这个功能:
    '先加一个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
      

  6.   

    to 毁于随:Dim bFmt1 As New StdDataFormat这个应该是自定义的数据型吧,是怎么定义的啊?to 莫依:我觉得我的东东用mshflexgrid应该还比较好实现,但是我没有用过这个控件,怎么定义数据格式和在指定列的每个单元格里插入复选框呢?