http://www.wzjcw.net/vbgood/taishan/index.html
【DATAGRID模拟主细表】源代码。

解决方案 »

  1.   

    只有BOTTUN,没有什么下接框,得自已在窗口上放置一个LISTBOX 控件
      

  2.   

    是吗?那设置Button属性有什么用呢?
      

  3.   

    Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
        Dim hh As Integer
        Dim Xh As Integer
        Dim Cpm As String
        Dim cSpdj1 As Double
        hh = 12
        
        If DataGrid1.Enabled = True Then
            If DataGrid1.Columns(0).Text = "品牌" And DataGrid1.Columns(0).Text = "工艺" And DataGrid1.Columns(0).Text = "规格" And DataGrid1.Columns(0).Text = "TOTAL:" Then
                DataGrid1.Columns(9).Locked = True
            Else
                DataGrid1.Columns(9).Locked = False
            End If
            Select Case DataGrid1.Col
                Case 0
                    Check1.Visible = False
                    Text5.Visible = False
                    Combo2.Visible = True
                    Combo4.Visible = False
                    Combo5.Visible = False
                    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 + hh) + (DataGrid1.HeadLines - 1) * 195
                    Combo2.SetFocus
                    If DataGrid1.Columns(0).Text <> "" Then
                        Combo2.Text = DataGrid1.Columns(0).Text
                    End If
                Case 1
                    Check1.Visible = False
                    Combo2.Visible = False
                    Combo4.Visible = False
                    Combo5.Visible = False
                    Text5.Visible = False
                    Select Case DataGrid1.Columns(0).Text
                        Case "品名"
                            Check1.Visible = False
                            Text5.Visible = True
                            Combo2.Visible = False
                            Combo4.Visible = False
                            
                            Text5.Width = DataGrid1.Columns(DataGrid1.Col).Width + 50
                            Text5.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
                            Text5.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
                            Text5.SetFocus
                            If DataGrid1.Columns(0).Text <> "" Then
                                Text5.Text = DataGrid1.Columns(1).Text
                            End If
                    End Select
                Case 2
                    Check1.Visible = False
                    Combo2.Visible = False
                    Combo4.Visible = False
                    Combo5.Visible = False
                    Text5.Visible = False
                    Select Case DataGrid1.Columns(0).Text
                        Case "规格"
                            If DataGrid1.Columns(2).Text <> "" Then
                                Text5.Text = DataGrid1.Columns(2).Text
                            Else
                                If Text5.Text <> "" Then
                                    DataGrid1.Columns(2).Text = Text5.Text
                                End If
                            End If
                    End Select
                    If IsNull(Rs_Jc_Shhy_Sp.Fields("ID")) Or Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Then
                        DataGrid1.Enabled = False
                        Rs_Jc_Shhy_Sp.AddNew
                        Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount
                        Rs_Jc_Shhy_Sp.Fields("HTH") = Text1(0).Text
                        Rs_Jc_Shhy_Sp.MovePrevious
                        DataGrid1.Enabled = True
                    End If
                Case 6
                    Select Case DataGrid1.Columns(0).Text
                        Case "品名"
                            Combo5.Visible = True
                            Combo5.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30
                            Combo5.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
                            Combo5.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
                            Combo5.SetFocus
                        Case Else
                            Combo5.Visible = False
                    End Select
                Case 8
                    Check1.Visible = False
                    Text5.Visible = False
                    Combo2.Visible = False
                    Combo5.Visible = False
                    Select Case DataGrid1.Columns(0).Text
                        Case "价格条款"
                            Combo4.Visible = True
                            Combo4.Width = DataGrid1.Columns(DataGrid1.Col).Width + 30
                            Combo4.Left = DataGrid1.Left + DataGrid1.Columns(DataGrid1.Col).Left
                            Combo4.Top = DataGrid1.Top + DataGrid1.Row * (DataGrid1.RowHeight + hh) + (DataGrid1.HeadLines - 1) * 195
                            Combo4.SetFocus
                            If DataGrid1.Columns(8).Text <> "" Then
                                Combo4.Text = DataGrid1.Columns(8).Text
                            End If
                        Case Else
                            Combo4.Visible = False
                    End Select
                Case 9
                    Check1.Visible = False
                    Text5.Visible = False
                    Combo2.Visible = False
                    Combo5.Visible = False
                    Select Case DataGrid1.Columns(0).Text
                        Case "品牌", "工艺", "规格", "TOTAL:  "
                            Check1.Visible = False
                        Case Else
                            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
                    End Select
                    If IsNull(Rs_Jc_Shhy_Sp.Fields("ID")) Or Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount Then
                        DataGrid1.Enabled = False
                        Rs_Jc_Shhy_Sp.AddNew
                        Rs_Jc_Shhy_Sp.Fields("ID") = Rs_Jc_Shhy_Sp.RecordCount
                        Rs_Jc_Shhy_Sp.Fields("HTH") = Text1(0).Text
                        Rs_Jc_Shhy_Sp.MovePrevious
                        DataGrid1.Enabled = True
                    End If
                Case Else
                    Check1.Visible = False
                    Text5.Visible = False
                    Combo2.Visible = False
                    Combo4.Visible = False
                    Combo5.Visible = False
            End Select
      

  4.   

    代码好象不太完整,不明白啊。如有例子,请发到[email protected]
      

  5.   

    MSDN 上有例子,去将textbox改为listbox即可。
      

  6.   

    找一个 listbox 先隐藏,单击后出现,并转移焦点,完成后,刷新
      

  7.   

    找一个 listbox 先隐藏,单击后出现,并转移焦点,完成后,刷新
      

  8.   

    这个我知道,但这个Button具体有什么用呢?
    谁能告诉我啊,我可以再加分的。
      

  9.   

    在 MSFlexGrid 中使用 Combo
    ==================================================================
    '窗体部分
    ’To a form, add a command button (Command1) and a MSFlexGrid control (MSFlexGrid1). Add the following codeOption Explicit
    Public Sub FillComboData(currCol As Integer)
       Static lastColumn As Integer
      'Based on the column passed, fill the combo 
      'with the data for that column   
       If currCol <> lastColumn Then      
         'erase current combo 
          Call SendMessage(Combo1.hwnd, CB_RESETCONTENT, 0&, ByVal 0&)   
          Select Case currCol
             Case 1:
               'Load the ComboBox's list
                With Combo1
                   .AddItem "Some text"
                   .AddItem "Some more text"
                   .AddItem "Still more text"
                   .AddItem "Yet even more text"
                   .AddItem "Way more text than that"
                End With            
             Case 2:
               'Load the ComboBox's list
                With Combo1
                   .AddItem "125.00"
                   .AddItem "133.00"
                   .AddItem "229.00"
                   .AddItem "345.00"
                   .AddItem "385.00"
                End With            
             Case 3:
               'Load the ComboBox's list
                With Combo1
                   .AddItem "box"
                   .AddItem "carton"
                   .AddItem "case"
                   .AddItem "each"
                   .AddItem "package"
                End With                     
             Case Else
          End Select   
       End If   
       lastColumn = currCol   
    End Sub
    Private Sub Command1_Click()
       Unload Me   
    End Sub
    Private Sub Form_Unload(Cancel As Integer)    
        If defWinProc <> 0 Then
           Unhook   'Stop checking messages
        End If    
    End Sub
    Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, _
                                      X As Single, Y As Single)
       Static CurrentWidth As Single   
      'Check to see if the Cell's width has changed  
       With MSFlexGrid1
          If .CellWidth <> CurrentWidth Then         
             Combo1.Width = .CellWidth
             CurrentWidth = .CellWidth      
          End If
       End With
    End Sub
    Private Sub Form_Load()
       With MSFlexGrid1   
          hWndFlex = .hwnd
          Hook          'Start checking messages
          .AllowUserResizing = flexResizeColumns
          .Cols = 4
          .Rows = 6
          .RowHeightMin = Combo1.Height      
       End With   
       With Combo1
          .Visible = False
          .ZOrder 0
          .Width = MSFlexGrid1.CellWidth
       End With   
    End Sub
    Private Sub Combo1_Click()
       'Place the selected item into the
       'Cell and hide the ComboBox
        MSFlexGrid1.Text = Combo1.Text
        Combo1.Visible = False    
    End Sub
    ===================================
    ’模块部分
    Public Const GWL_WNDPROC As Long = (-4)
    Public Const WM_SIZE As Long = &H5
    Public Const WM_PAINT As Long = &HF
    Public Const CB_DELETESTRING As Long = &H144
    Public Const CB_RESETCONTENT As Long = &H14B
    Public Const WM_LBUTTONDOWN As Long = &H201
    Public Const WM_LBUTTONUP As Long = &H202
    Public defWinProc As Long
    Public hWndFlex As Long
    Declare Function CallWindowProc Lib "user32" _
       Alias "CallWindowProcA" _
      (ByVal lpPrevWndFunc As Long, _
       ByVal hwnd As Long, ByVal Msg As Long, _
       ByVal wParam As Long, ByVal lParam As Long) As Long
    Declare Function SetWindowLong Lib "user32" _
       Alias "SetWindowLongA" _
      (ByVal hwnd As Long, ByVal nIndex As Long, _
       ByVal dwNewLong As Long) As Long
    Public Declare Function SendMessage Lib "user32" _
       Alias "SendMessageA" _
      (ByVal hwnd As Long, ByVal wMsg As Long, _
       ByVal wParam As Long, lParam As Any) As Long
    Public Sub Hook()
        If defWinProc = 0 Then       
          defWinProc = SetWindowLong(hWndFlex, _
                                     GWL_WNDPROC, _
                                     AddressOf WindowProc)      
        End If    
    End Sub
    Public Sub Unhook()    
       If defWinProc = 0 Then
          Call SetWindowLong(hWndFlex, _
                             GWL_WNDPROC, _
                             defWinProc)
          defWinProc = 0
       End If    
    End Sub
    Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _
                               ByVal wParam As Long, ByVal lParam As Long) As Long   
       WindowProc = CallWindowProc(defWinProc, hwnd, uMsg, wParam, lParam)
       Select Case uMsg   
          Case WM_SIZE, WM_PAINT      
             With Form1
                .Combo1.Width = .MSFlexGrid1.CellWidth
                .Combo1.Left = .MSFlexGrid1.CellLeft + .MSFlexGrid1.Left
                .Combo1.Top = .MSFlexGrid1.CellTop + .MSFlexGrid1.Top
             End With         
          Case WM_LBUTTONDOWN
             With Form1
                .Combo1.Width = .MSFlexGrid1.CellWidth
                .Combo1.Left = .MSFlexGrid1.CellLeft + .MSFlexGrid1.Left
                .Combo1.Top = .MSFlexGrid1.CellTop + .MSFlexGrid1.Top
             End With      
             With Form1.MSFlexGrid1      
                If .Col > 0 Then            
                   Form1.Combo1.Visible = False
                   Form1.Combo1.Text = ""
                   Form1.FillComboData .Col
                   Form1.Combo1.Text = .Text
                   Form1.Combo1.Visible = True
                End If   
             End With         
          Case Else
       End Select
    End Function
      

  10.   

    sonicdater(发呆呆(我答问题*不吵架*因为我呆)) :
      我试过了,感觉有点慢啊。
      

  11.   

    UP一下:
      DataGrid控件的Column对象的Button属性设置有何意思?
      

  12.   

    抱歉。 上面那个 是出自 微软的MVP 网站的。
      

  13.   

    是 微软的 MVP 做的。 教大家的。
      

  14.   

    datagrid的下拉菜单的做法我给个原理:
    给combox邦定一个数据控件,在list属性中选择好数据字段(或者自己输入数值),定位combox的相对位置。