朋友,这个好呀,先将combox.visable=false在datagrid中的相关事件中显示combox,并附上不同的值再显示出来就行了!

解决方案 »

  1.   

    对这几个事件相应的处理,显示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
      

  2.   

    主要是让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
      

  3.   

    这是一个相关例子,希望对你有帮助:
    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
      

  4.   

    对不起
    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
      

  5.   

    对不起
    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
      

  6.   

    '在窗体上放一个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
      

  7.   

    上面的例子是第3列显示combobox1
      

  8.   

    好像DATAGRID利用一个BUTTON属性就可以实现的
    但我不知道具体的实一方法
      

  9.   

    www.dapha.net/vb有实例
    datagrid明细表
      

  10.   

    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
      

  11.   

    1.首先选中Button属性,在Datagrid中回出现下拉按牛
    2.建立一个listbox,隐藏
    3.响应Button_click事件,计算鼠标的位置,然后将listbox显示,达到下拉的效果
      

  12.   

    在点击之前不可见,点击后取得被点击单元格的位置,再在单元格上显示你的组合框,不过这个显得有些机械,不如用VSFlexGrid,功能十分强大,他会给你一个惊喜,去下载吧
      

  13.   

    to:
    Serlen(Serlen)
    留下你的email,我给你发个程序
      

  14.   

    在asp.net 中是很容易得的
    vb中还没试过。不知道netman1999可否给我一份啊
    [email protected]  谢谢