你误解了"数据格式可以选定为复选框",它的意思是把 Boolean 型数据的"值"格式化为"复选框"的"值",仅仅是 True 相当于 1(vbChecked),False 相当于 0(vbUnChecked)的意思!"复选框"还得编程加! 
    Controls: 
    Form1、Check1、DataGrid1 
    引用: 
    Microsoft DataFormatting Object ... 
    Code: 
    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 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 
<END>