热情软件屋

 

如何才能使DataGrid象Access那样显示复选框呢


编号:QA004121
建立日期: 2001年4月18日 最后修改日期:2001年4月18日
所属类别:

杨俊:
    操作系统:win98
    编程工具:vb60
    问题:如何才能使DataGrid象Access那样显示复选框呢?当DataGrid绑定到布尔型数据源时,有一个选项,数据格式可以选定为复选框可是,DataGrid运行时还是显示0,1而不是复选框,如何才能使DataGrid象Access那样显示复选框呢?可不要象dbgrid的高级示例中那样解决。要象Access那样每一条纪录都有复选框。
    水平: 高手

回答:

    你误解了"数据格式可以选定为复选框",它的意思是把 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

此问题由playyuer回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio