我想可以在程序中画另一个复选框datacheckbox控件,并将其覆盖在你的datagrid上的指定的位置,应该是可以实现,不过写程序有一点儿烦,至于别的实现方法我就不大知道了。

解决方案 »

  1.   

    首先要多谢cwhelucky的回复。可能是我的意思讲得不太明白,我是指每行都要显示一个复选框,在 DATAGRID属性页,格式选项卡(格式类型)中有复选框一选项,只是不知如何使用,哪位知道的朋友请指点一二,先谢了!
      

  2.   

    Controls:
    Form1、Check1、DataGrid1
    Code:
    Dim adoRecordset As ADODB.Recordset
    Const dY = 20
    Const dX = 10Const WdX = 8
    Const HdY = 10Private Sub Check1_LostFocus()
    Check1.Visible = False
    End SubPrivate 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 SubPrivate 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 iIf 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 SubPrivate 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 SubPrivate Sub DataGrid1_Scroll(Cancel As Integer)
    Check1.Visible = False
    End SubPrivate Sub DataGrid1_SplitChange()
    'Check1.Visible = False
    End SubPrivate 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
      

  3.   

    尊敬的Playyuer:
       太谢谢你了! 让我欣喜若狂……
       能给的分数不多, 抱谦!无乃小岛挣分的水平有限,只好省着用了 呵。
       我的OICQ是29881818, 有空找我聊呀, 很想有个象你这样的朋友