对这几个事件相应的处理,显示combox的地方就显示,初值的地方就赋,其他还要在combox的相关事件中控制combox的显示属性 Private Sub MSFlexGrid1_Click()End SubPrivate Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)End SubPrivate Sub MSFlexGrid1_LeaveCell()End SubPrivate Sub MSFlexGrid1_RowColChange()End SubPrivate Sub MSFlexGrid1_Scroll()End SubPrivate Sub MSFlexGrid1_SelChange()End Sub
主要是让COMBOBOX覆盖单元格 Private Sub MoveCombo() On Error GoTo Error_Handler Dim gcol As MSDataGridLib.Column Set gcol = DataGrid1.Columns(DataGrid1.col) If gcol.Caption = "up" And DataGrid1.CurrentCellVisible Then cob1.Move DataGrid1.Left + gcol.Left, DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row), gcol.Width cob1.ZOrder cob1.SetFocus cob1.Text = gcol.Text Exit Sub End If Error_Handler: cob1.Move -10000 If DataGrid1.Visible Then DataGrid1.SetFocus End SubPrivate Sub DataGrid1_Click() DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex) End SubPrivate Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) MoveCombo End SubPrivate Sub DataGrid1_RowResize(Cancel As Integer) MoveCombo End SubPrivate Sub DataGrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer) MoveCombo End SubPrivate Sub DataGrid1_Scroll(Cancel As Integer) MoveCombo End Sub
这是一个相关例子,希望对你有帮助: Private Sub DBGrid1_Click() If Not Combo1.Visible Then Combo1.Visible = True End If End SubPrivate Sub DBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) Debug.Print DBGrid1.Columns(DBGrid1.Col).Left, Debug.Print DBGrid1.Columns(DBGrid1.Col).Top, Debug.Print DBGrid1.Columns(DBGrid1.Col).Width, Debug.Print DBGrid1.RowHeight
Combo1.Width = DBGrid1.Columns(DBGrid1.Col).Width Combo1.Left = DBGrid1.Left + DBGrid1.Columns(DBGrid1.Col).Left Combo1.Top = DBGrid1.Top + DBGrid1.Row * DBGrid1.RowHeight + 225 End SubPrivate Sub Form_Load() DBGrid1.RowHeight = Combo1.Height Combo1.Visible = False End Sub
对不起 Private Sub DataGrid1_Click() DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex) End Sub 应为 Private Sub cob1_Click() DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex) End Sub
对不起 Private Sub DataGrid1_Click() DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex) End Sub 应为 Private Sub cob1_Click() DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex) End Sub
'在窗体上放一个DataGrid1和一个ComboBox1,将Datagrid1的行高设置和combobox1的高度一致 '代码如下: Private Sub datagrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) On Error GoTo RowColChange_End ComboBox1.Visible = False If DataGrid1.Col > 0 And DataGrid1.Row >= 0 Then ComboBox1.Left = DataGrid1.Columns(DataGrid1.Col).Left + 255 ComboBox1.Top = DataGrid1.RowTop(DataGrid1.Row) + 135 ComboBox1.Width = DataGrid1.Columns(DataGrid1.Col).Width End IfIf DataGrid1.Col = 2 Then '这一列显示combobox1 ComboBox1.Visible = True End If RowColChange_End: End SubPrivate Sub datagrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer) ComboBox1.Visible = False End SubPrivate Sub datagrid1_RowResize(Cancel As Integer) On Error GoTo datagrid1_RowResize_End ComboBox1.Visible = False If DataGrid1.RowHeight > 300 Then DataGrid1.RowHeight = 300 End If datagrid1_RowResize_End: End SubPrivate Sub datagrid1_Scroll(Cancel As Integer) On Error GoTo datagrid1_Scroll_End ComboBox1.Visible = False datagrid1_Scroll_End: End SubPrivate Sub combobox1_Click() On Error GoTo combobox1_Click_End If ComboBox1.Text <> "" Then DataGrid1.Text = ComboBox1.Text End If DataGrid1.SetFocus combobox1_Click_End: End SubPrivate Sub combobox1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then combobox1_Click End If End Sub Private Sub datagrid1_HeadClick(ByVal ColIndex As Integer) On Error GoTo datagrid1_HeadClick_End ComboBox1.Visible = False datagrid1_HeadClick_End: End Sub
上面的例子是第3列显示combobox1
好像DATAGRID利用一个BUTTON属性就可以实现的 但我不知道具体的实一方法
www.dapha.net/vb有实例 datagrid明细表
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) If DataGrid1.Enabled = True Then If Rs_Spmx_Flz.EOF Then If Rs_Spmx_Flz.RecordCount > 0 Then Rs_Spmx_Flz.MoveFirst Else Rs_Spmx_Flz.AddNew Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount Rs_Spmx_Flz.Fields("staffcode") = cStaffCode ' Rs_Spmx_Flz.Fields("deptcode") = cDeptCode End If End If Select Case DataGrid1.Col Case 0, 6 If Rs_Spmx_Flz.RecordCount < 1 Then Rs_Spmx_Flz.AddNew Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount Rs_Spmx_Flz.Fields("staffcode") = cStaffCode Rs_Spmx_Flz.MovePrevious DataGrid1.Enabled = True Else If IsNull(Rs_Spmx_Flz.Fields("ID")) Or Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount Then DataGrid1.Enabled = False Rs_Spmx_Flz.AddNew Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount Rs_Spmx_Flz.Fields("staffcode") = cStaffCode Rs_Spmx_Flz.MovePrevious DataGrid1.Enabled = True End If End If Case 2 Combo1.Visible = True Combo1.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50 Combo1.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left Combo1.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + 12) + (DataGrid1.HeadLines) * 195 Combo1.SetFocus If DataGrid1.Columns(0).Text <> "" Then Combo1.Text = DataGrid1.Columns(2).Text End If Case 3 Combo2.Clear Rs_Dm_Sbdm.Filter = "spdm='" & DataGrid1.Columns(0).Text & "'" If Rs_Dm_Sbdm.RecordCount > 0 Then Rs_Dm_Sbdm.MoveFirst While Not Rs_Dm_Sbdm.EOF
Combo2.AddItem Trim(Rs_Dm_Sbdm("spgg")) & "" Rs_Dm_Sbdm.MoveNext Wend End If Rs_Dm_Sbdm.Filter = "" Combo2.Visible = True Combo2.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50 Combo2.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left Combo2.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + 12) + (DataGrid1.HeadLines) * 195 Combo2.SetFocus If DataGrid1.Columns(0).Text <> "" Then Combo2.Text = DataGrid1.Columns(3).Text End IfCase Else Combo1.Visible = False Combo2.Visible = False End Select End If End Sub
Private Sub MSFlexGrid1_Click()End SubPrivate Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)End SubPrivate Sub MSFlexGrid1_LeaveCell()End SubPrivate Sub MSFlexGrid1_RowColChange()End SubPrivate Sub MSFlexGrid1_Scroll()End SubPrivate Sub MSFlexGrid1_SelChange()End Sub
Private Sub MoveCombo()
On Error GoTo Error_Handler
Dim gcol As MSDataGridLib.Column
Set gcol = DataGrid1.Columns(DataGrid1.col)
If gcol.Caption = "up" And DataGrid1.CurrentCellVisible Then
cob1.Move DataGrid1.Left + gcol.Left, DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row), gcol.Width
cob1.ZOrder
cob1.SetFocus
cob1.Text = gcol.Text
Exit Sub
End If
Error_Handler:
cob1.Move -10000
If DataGrid1.Visible Then DataGrid1.SetFocus
End SubPrivate Sub DataGrid1_Click()
DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex)
End SubPrivate Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
MoveCombo
End SubPrivate Sub DataGrid1_RowResize(Cancel As Integer)
MoveCombo
End SubPrivate Sub DataGrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer)
MoveCombo
End SubPrivate Sub DataGrid1_Scroll(Cancel As Integer)
MoveCombo
End Sub
Private Sub DBGrid1_Click()
If Not Combo1.Visible Then
Combo1.Visible = True
End If
End SubPrivate Sub DBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Debug.Print DBGrid1.Columns(DBGrid1.Col).Left,
Debug.Print DBGrid1.Columns(DBGrid1.Col).Top,
Debug.Print DBGrid1.Columns(DBGrid1.Col).Width,
Debug.Print DBGrid1.RowHeight
Combo1.Width = DBGrid1.Columns(DBGrid1.Col).Width
Combo1.Left = DBGrid1.Left + DBGrid1.Columns(DBGrid1.Col).Left
Combo1.Top = DBGrid1.Top + DBGrid1.Row * DBGrid1.RowHeight + 225
End SubPrivate Sub Form_Load()
DBGrid1.RowHeight = Combo1.Height
Combo1.Visible = False
End Sub
Private Sub DataGrid1_Click()
DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex)
End Sub
应为
Private Sub cob1_Click()
DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex)
End Sub
Private Sub DataGrid1_Click()
DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex)
End Sub
应为
Private Sub cob1_Click()
DataGrid1.Columns("up").Value=cob1.ItemData(cob1.ListIndex)
End Sub
'代码如下:
Private Sub datagrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
On Error GoTo RowColChange_End
ComboBox1.Visible = False
If DataGrid1.Col > 0 And DataGrid1.Row >= 0 Then
ComboBox1.Left = DataGrid1.Columns(DataGrid1.Col).Left + 255
ComboBox1.Top = DataGrid1.RowTop(DataGrid1.Row) + 135
ComboBox1.Width = DataGrid1.Columns(DataGrid1.Col).Width
End IfIf DataGrid1.Col = 2 Then '这一列显示combobox1
ComboBox1.Visible = True
End If
RowColChange_End:
End SubPrivate Sub datagrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer)
ComboBox1.Visible = False
End SubPrivate Sub datagrid1_RowResize(Cancel As Integer)
On Error GoTo datagrid1_RowResize_End
ComboBox1.Visible = False
If DataGrid1.RowHeight > 300 Then
DataGrid1.RowHeight = 300
End If
datagrid1_RowResize_End:
End SubPrivate Sub datagrid1_Scroll(Cancel As Integer)
On Error GoTo datagrid1_Scroll_End
ComboBox1.Visible = False
datagrid1_Scroll_End:
End SubPrivate Sub combobox1_Click()
On Error GoTo combobox1_Click_End
If ComboBox1.Text <> "" Then
DataGrid1.Text = ComboBox1.Text
End If
DataGrid1.SetFocus
combobox1_Click_End:
End SubPrivate Sub combobox1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
combobox1_Click
End If
End Sub
Private Sub datagrid1_HeadClick(ByVal ColIndex As Integer)
On Error GoTo datagrid1_HeadClick_End
ComboBox1.Visible = False
datagrid1_HeadClick_End:
End Sub
但我不知道具体的实一方法
datagrid明细表
If DataGrid1.Enabled = True Then
If Rs_Spmx_Flz.EOF Then
If Rs_Spmx_Flz.RecordCount > 0 Then
Rs_Spmx_Flz.MoveFirst
Else
Rs_Spmx_Flz.AddNew
Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount
Rs_Spmx_Flz.Fields("staffcode") = cStaffCode
' Rs_Spmx_Flz.Fields("deptcode") = cDeptCode
End If
End If
Select Case DataGrid1.Col
Case 0, 6
If Rs_Spmx_Flz.RecordCount < 1 Then
Rs_Spmx_Flz.AddNew
Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount
Rs_Spmx_Flz.Fields("staffcode") = cStaffCode
Rs_Spmx_Flz.MovePrevious
DataGrid1.Enabled = True
Else
If IsNull(Rs_Spmx_Flz.Fields("ID")) Or Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount Then
DataGrid1.Enabled = False
Rs_Spmx_Flz.AddNew
Rs_Spmx_Flz.Fields("ID") = Rs_Spmx_Flz.RecordCount
Rs_Spmx_Flz.Fields("staffcode") = cStaffCode
Rs_Spmx_Flz.MovePrevious
DataGrid1.Enabled = True
End If
End If
Case 2
Combo1.Visible = True
Combo1.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50
Combo1.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Combo1.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + 12) + (DataGrid1.HeadLines) * 195
Combo1.SetFocus
If DataGrid1.Columns(0).Text <> "" Then
Combo1.Text = DataGrid1.Columns(2).Text
End If
Case 3
Combo2.Clear
Rs_Dm_Sbdm.Filter = "spdm='" & DataGrid1.Columns(0).Text & "'"
If Rs_Dm_Sbdm.RecordCount > 0 Then
Rs_Dm_Sbdm.MoveFirst
While Not Rs_Dm_Sbdm.EOF
Combo2.AddItem Trim(Rs_Dm_Sbdm("spgg")) & ""
Rs_Dm_Sbdm.MoveNext
Wend
End If
Rs_Dm_Sbdm.Filter = ""
Combo2.Visible = True
Combo2.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50
Combo2.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
Combo2.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + 12) + (DataGrid1.HeadLines) * 195
Combo2.SetFocus
If DataGrid1.Columns(0).Text <> "" Then
Combo2.Text = DataGrid1.Columns(3).Text
End IfCase Else
Combo1.Visible = False
Combo2.Visible = False
End Select
End If
End Sub
2.建立一个listbox,隐藏
3.响应Button_click事件,计算鼠标的位置,然后将listbox显示,达到下拉的效果
Serlen(Serlen)
留下你的email,我给你发个程序
vb中还没试过。不知道netman1999可否给我一份啊
[email protected] 谢谢