高分請教﹕如何在DATAGRID列中加入CHECKBOX控件﹐綁定BOOLEAN類型的字段﹖

mislrb 2002-02-28 04:18:31
要求用最精簡的語句﹐不勝感激﹗﹗﹗
...全文
81 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
gump2000 2002-04-06
  • 打赏
  • 举报
回复
用控件绑定修改是一个不好的习惯,最好自己用标准SQL语句来处理
zxmoon 2002-04-04
  • 打赏
  • 举报
回复
在属性中的format中设置列的格式为checkbox,并在columns 中绑定到boolean列。
sunnycai 2002-04-04
  • 打赏
  • 举报
回复
装一个TrueDBGrid控件,什么事都可搞定。
lihonggen0 2002-04-04
  • 打赏
  • 举报
回复
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Select Case DataGrid1.Col
Case 0

Check1.Visible = True
Check1.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30
Check1.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Check1.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
Check1.SetFocus
If DataGrid1.Columns(9).Text <> "" Then
Check1.Value = 1
Else
Check1.Value = 0
End If
Case Else
Check1.Visible = False
End Select
End Sub

mcsedb 2002-04-04
  • 打赏
  • 举报
回复
我也是觉得用load(i)。也没试过,拿位能做个肯定的答复。
还有有楼上说的,如果有tdbgrid直接绑定一个boolean能否有贴子说的效果。



HeatLoad 2002-03-09
  • 打赏
  • 举报
回复
那你就把 sonicdater(发呆呆(我答问题*不吵架*因为我呆)) 的代码改一下。
用 数组控件, 全部定位到 你指定的 列上去。
mislrb 2002-03-08
  • 打赏
  • 举报
回复
up
mislrb 2002-03-02
  • 打赏
  • 举报
回复
非常感激各位!
我想是我没有说清楚。
我希望出来的效果是BOOLEAN列全部是CHECKBOX,而不是CLICK之后显示出来。我要实现的功能是:在一个DATAGRID中选定一个或几个记录进行删除或移动,另外一个DATAGRID随之增加或减少相应记录。

请大家再作答!!
iwzw 2002-03-01
  • 打赏
  • 举报
回复
up
Steven 2002-03-01
  • 打赏
  • 举报
回复
用True DBGrid!!!
feihong0233 2002-03-01
  • 打赏
  • 举报
回复
误解为combobox了,
不过思路一样,
自己弄吧,。
feihong0233 2002-03-01
  • 打赏
  • 举报
回复
误解为combobox了。
不过差不多。
自己看着办吧。
feihong0233 2002-03-01
  • 打赏
  • 举报
回复
笨方法:
绑定到TextBox控件上,
TextBox隐藏。
ChechBox_Chang()
if CheckBox.Text="男" then
TextBox.Text="True"
ElseIf CheckBox.Text="女"
TextBox.Text="False"
Endif
end sub
然后在TextBox_Chang()
里面写相应的语句。

明白?
sonicdater 2002-03-01
  • 打赏
  • 举报
回复
下面这个例子 实现了MSFlexGrid control 中 显示 checkboxes
Option Explicit

Private Sub SetRow(ByVal idx As Integer, ByVal person_name As String, ByVal needs_air As Boolean, ByVal needs_hotel As Boolean, ByVal needs_car As Boolean)
With MSFlexGrid1
.TextMatrix(idx, 0) = person_name
.Row = idx

.Col = 1
If needs_air Then
Set .CellPicture = picChecked.Picture
Else
Set .CellPicture = picUnchecked.Picture
End If

.Col = 2
If needs_hotel Then
Set .CellPicture = picChecked.Picture
Else
Set .CellPicture = picUnchecked.Picture
End If

.Col = 3
If needs_car Then
Set .CellPicture = picChecked.Picture
Else
Set .CellPicture = picUnchecked.Picture
End If
End With
End Sub
Private Sub Form_Load()
With MSFlexGrid1
.BackColor = & HE0E0E0
.Rows = 4
.Cols = 4
.FixedCols = 1
.FixedRows = 1

.TextMatrix(0, 0) = "Name"
.TextMatrix(0, 1) = "Air"
.TextMatrix(0, 2) = "Hotel"
.TextMatrix(0, 3) = "Car"
End With

SetRow 1, "Alice", True, True, False
SetRow 2, "Bob", True, False, False
SetRow 3, "Carter", False, False, True
End Sub

Private Sub Form_Resize()
MSFlexGrid1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub


' Toggle the check box.
Private Sub MSFlexGrid1_Click()
If MSFlexGrid1.Col < 1 Or MSFlexGrid1.Row < 1 Then Exit Sub

If MSFlexGrid1.CellPicture = picChecked Then
Set MSFlexGrid1.CellPicture = picUnchecked
Else
Set MSFlexGrid1.CellPicture = picChecked
End If
End Sub
001chb 2002-02-28
  • 打赏
  • 举报
回复
如何加combobox 呢?
playyuer 2002-02-28
  • 打赏
  • 举报
回复
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 Command1_Click()
Form1.Show vbModal
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
Public Sub DisableDataGridSplit(DataGridX As DataGrid, CommandX As CommandButton)
CommandX.Move DataGridX.Left + 10, DataGridX.Top + DataGridX.Height - CommandX.Height + 30, 30, 240
CommandX.TabStop = False
End Sub
4_Eye_Cat 2002-02-28
  • 打赏
  • 举报
回复
改用tdbgrid
直接替换原来的datagrid
在属性的value栏中修改就是了

kmcyz 2002-02-28
  • 打赏
  • 举报
回复
在属性中设置某列的格式为“复选框”。
95b1 2002-02-28
  • 打赏
  • 举报
回复
有谁知道,请一并告诉我.
cuiyxy 2002-02-28
  • 打赏
  • 举报
回复
我曾经花了N多时间去尝试,终不得志
后来改用FlexGrid去实现

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧