我做的一个VB窗体上有7个datacombo控件 分别对应显示一张数据表的7个字段 我想达到的要求是单击其中任意一个的下拉箭头入能显示该字段的所以记录, 但是当单击选中任意一个或者自己输入记录的内容时 其他6个datacombo就只显示同一条记录的对应字段的内容  下面是我写的一个datacombo控件对应的代码 我想问下这样写有问题没有?还有就是我是不是得这样再写六个?是不是还要写7个Adodc的Refresh方法  
Ado_Cnumber.ConnectionString = Conn
Ado_Cnumber.RecordSource = "Select * From Cargo  Order By CId"
  Ado_Ccode.Refresh
  Ado_Cname.Refresh
  Ado_Ctype.Refresh
  Ado_Cunit.Refresh
  Ado_Cwsprice.Refresh
  Ado_Csrprice.Refresh
Set dco_Cnumber.RowSource = Ado_Cnumber
dco_Cnumber.ListField = "Cnumber"
dco_Cnumber.BoundColumn = "CId"

解决方案 »

  1.   

    还要写7个Adodc的Refresh方法  不需要这样
    private sub datacombo_click(index as integer)
        dim intTemp as integer
        dim I as integer    intTemp=datacombo(index).listindex  '取你操作的datacombo的listindex     for i = 0 to ubound(datacombo)
            datacombo(i).listindex = intTemp   '全部datacombo的listindex 相同
        next i
    end sub
      

  2.   

    这样可以吗?那7个datacombo都分别命名了的所以不存在datacombo_click 这样岂不是还是要写 七个click 事件我是要用
    七个datacombo分别显示 数据表的七个字段的
      

  3.   

    7个datacombo都分别命名了如果是想七个 dataCombo 联动.建议用数组控件.
      只写一次 click 事件.如1楼所说.如果你一定要用七个不同名字的表示.那就可有写七个事件了.
      

  4.   

    谢谢1、3楼的大大们!Private Sub Refresh_Ccode()
      If Len(Trim(dco_Ccode.Text)) > 0 Then
        Ado_Ccode.ConnectionString = Conn
        Ado_Ccode.RecordSource = "Select * From Cargo Where CId=" + Trim(dco_Ccode.BoundText()) + " Order By CId"
        Ado_Ccode.Refresh
        Set dco_Ccode.RowSource = Ado_Ccode
       dco_Ccode.ListField = "Ccode"
       dco_Ccode.BoundColumn = "CId"
       dco_Ccode.Text = ""
      End If
    End Sub
    这是我写的一个Refresh方法 如果按这样的话 那7个datacombo都得分别命名了    还有就是我按照一楼说的把里面的datacombo换成我命名的了 但是会报错 说错误的阐述号或者无效的属性赋值 这是个什么问题
      

  5.   

    你如果用控件数组
    private sub datacombo_click(index as integer) 
        dim intTemp as integer 
        dim I as integer     intTemp=datacombo(index).listindex  '取你操作的datacombo的listindex     for i = 0 to ubound(datacombo) 
            datacombo(i).listindex = intTemp  '全部datacombo的listindex 相同 
        next i 
    end sub如果分别命名
    private sub datacombo1_click() 
        dim intTemp as integer     intTemp=datacombo1.listindex  '取你操作的datacombo的listindex     datacombo2.listindex = intTemp  '全部datacombo的listindex 相同 
         datacombo3.listindex = intTemp
        datacombo4.listindex = intTemp
        datacombo5.listindex = intTemp
        datacombo6.listindex = intTemp
        datacombo7.listindex = intTemp
       
    end subprivate sub datacombo2_click() 
        dim intTemp as integer     intTemp=datacombo2.listindex  '取你操作的datacombo的listindex     datacombo1.listindex = intTemp'全部datacombo的listindex 相同 
           datacombo3.listindex = intTemp
        datacombo4.listindex = intTemp
        datacombo5.listindex = intTemp
        datacombo6.listindex = intTemp
        datacombo7.listindex = intTemp
       
    end subprivate sub datacombo3_click() 
        dim intTemp as integer     intTemp=datacombo3.listindex  '取你操作的datacombo的listindex     datacombo1.listindex = intTemp
        datacombo2.listindex = intTemp  '全部datacombo的listindex 相同 
        datacombo4.listindex = intTemp
        datacombo5.listindex = intTemp
        datacombo6.listindex = intTemp
        datacombo7.listindex = intTemp
       
    end sub
    private sub datacombo4_click() 
        dim intTemp as integer     intTemp=datacombo4.listindex  '取你操作的datacombo的listindex     datacombo1.listindex = intTemp
        datacombo2.listindex = intTemp  '全部datacombo的listindex 相同 
         datacombo3.listindex = intTemp
        datacombo5.listindex = intTemp
        datacombo6.listindex = intTemp
        datacombo7.listindex = intTemp
       
    end subprivate sub datacombo5_click() 
        dim intTemp as integer     intTemp=datacombo5.listindex  '取你操作的datacombo的listindex     datacombo1.listindex = intTemp
        datacombo2.listindex = intTemp  '全部datacombo的listindex 相同 
         datacombo3.listindex = intTemp
        datacombo4.listindex = intTemp
        datacombo6.listindex = intTemp
        datacombo7.listindex = intTemp
       
    end subprivate sub datacombo6_click() 
        dim intTemp as integer     intTemp=datacombo6.listindex  '取你操作的datacombo的listindex     datacombo1.listindex = intTemp
        datacombo2.listindex = intTemp  '全部datacombo的listindex 相同 
         datacombo3.listindex = intTemp
        datacombo4.listindex = intTemp
        datacombo5.listindex = intTemp
        datacombo7.listindex = intTemp
       
    end sub
    private sub datacombo7_click() 
        dim intTemp as integer     intTemp=datacombo7.listindex  '取你操作的datacombo的listindex     datacombo1.listindex = intTemp
        datacombo2.listindex = intTemp  '全部datacombo的listindex 相同 
         datacombo3.listindex = intTemp
        datacombo4.listindex = intTemp
        datacombo5.listindex = intTemp
        datacombo6.listindex = intTemp
       
    end sub呵呵,是不是很恐怖?
      

  6.   

    Private Sub DataCombo_click(index As Integer)————这里出错
        Dim intTemp As Integer
        Dim i As Integer    intTemp = DataCombo(index).ListIndex '取操作的datacombo的listindex    For i = 0 To UBound(dco_Cnumber)
            DataCombo(i).ListIndex = intTemp  '全部datacombo的listindex 相同
        Next i
    End SubPrivate Sub Refresh_Cnumber()
      If Len(Trim(DataComo(0).Text)) > 0 Then
        Ado_Cnumber.ConnectionString = Conn
        Ado_Cnumber.RecordSource = "Select * From Cargo Where CId=" + Trim(DataComo(0).BoundText()) + " Order By CId"
        Ado_Cnumber.Refresh
        Set DataComo(0).RowSource = Ado_Cnumber
       DataComo(0).ListField = "Cnumber"
       DataComo(0).BoundColumn = "CId"
       DataComo(0).Text = ""
      End If
    End Sub
    Private Sub Refresh_Ccode()
      If Len(Trim(DataComo(1).Text)) > 0 Then
        Ado_Ccode.ConnectionString = Conn
        Ado_Ccode.RecordSource = "Select * From Cargo Where CId=" + Trim(DataComo(1).BoundText()) + " Order By CId"
        Ado_Ccode.Refresh
        Set DataComo(1).RowSource = Ado_Ccode
       DataComo(1).ListField = "Ccode"
       DataComo(1).BoundColumn = "CId"
       DataComo(1).Text = ""
      End If
    End Sub
    Private Sub Refresh_Cname()
      If Len(Trim(DataComo(2).Text)) > 0 Then
        Ado_Cname.ConnectionString = Conn
        Ado_Cname.RecordSource = "Select * From Cargo Where CId=" + Trim(DataComo(2).BoundText()) + " Order By CId"
        Ado_Cname.Refresh
        Set DataComo(2).RowSource = Ado_Cname
       DataComo(2).ListField = "Cname"
       DataComo(2).BoundColumn = "CId"
       DataComo(2).Text = ""
      End If
    End Sub
    Private Sub Refresh_Ctype()
      If Len(Trim(DataComo(3).Text)) > 0 Then
        Ado_Ctype.ConnectionString = Conn
        Ado_Ctype.RecordSource = "Select * From Cargo Where CId=" + Trim(DataComo(3).BoundText()) + " Order By CId"
        Ado_Ctype.Refresh
        Set DataComo(3).RowSource = Ado_Ctype
       DataComo(3).ListField = "Ctype"
       DataComo(3).BoundColumn = "CId"
       DataComo(3).Text = ""
      End If
    End Sub
    Private Sub Refresh_Cunit()
      If Len(Trim(DataComo(4).Text)) > 0 Then
        Ado_Cunit.ConnectionString = Conn
        Ado_Cunit.RecordSource = "Select * From Cargo Where CId=" + Trim(DataComo(4).BoundText()) + " Order By CId"
        Ado_Cunit.Refresh
        Set DataComo(4).RowSource = Ado_Cunit
       DataComo(4).ListField = "Cunit"
       DataComo(4).BoundColumn = "CId"
       DataComo(4).Text = ""
      End If
    End Sub
    Private Sub Refresh_Cwsprice()
      If Len(Trim(DataComo(5).Text)) > 0 Then
        Ado_Cwsprice.ConnectionString = Conn
        Ado_Cwsprice.RecordSource = "Select * From Cargo Where CId=" + Trim(DataComo(5).BoundText()) + " Order By CId"
        Ado_Cwsprice.Refresh
        Set DataComo(5).RowSource = Ado_Cwsprice
       DataComo(5).ListField = "Cwsprice"
       DataComo(5).BoundColumn = "CId"
       DataComo(5).Text = ""
      End If
    End Sub
    Private Sub Refresh_Csrprice()
      If Len(Trim(DataComo(6).Text)) > 0 Then
        Ado_Csrprice.ConnectionString = Conn
        Ado_Csrprice.RecordSource = "Select * From Cargo Where CId=" + Trim(DataComo(6).BoundText()) + " Order By CId"
        Ado_Csrprice.Refresh
        Set DataComo(6).RowSource = Ado_Csrprice
       DataComo(6).ListField = "Csrprice"
       DataComo(6).BoundColumn = "CId"
       DataComo(6).Text = ""
      End If
    End Sub
      

  7.   

    Private Sub DataCombo_click(index As Integer)————这里出错 
        Dim intTemp As Integer 
        Dim i As Integer     intTemp = DataCombo(index).ListIndex '取操作的datacombo的listindex     For i = 0 To UBound(DataCombo) ——这里的我改正了
            DataCombo(i).ListIndex = intTemp  '全部datacombo的listindex 相同 
        Next i 
    End Sub 
      

  8.   

    Private Sub dco_Cnumber_click(index As Integer)————这里出错 
        Dim intTemp As Integer 
        Dim i As Integer     intTemp = DataCombo(index).ListIndex '取操作的datacombo的listindex     For i = 0 To UBound(dco_Cnumber) ——这里的我改正了 
            DataCombo(i).ListIndex = intTemp  '全部datacombo的listindex 相同 
        Next i 
    End Sub 
    datacombo要改成你自己的名字
    和下面一样修改
      

  9.   

    dim blnIsClick
    Private Sub dco_Cnumber_click(index As Integer)————这里出错 
        Dim intTemp As Integer 
        Dim i As Integer 
        
        if not blnIsClick then   '加一个判断,防止相互调用
            blnIsClick=true        intTemp = DataCombo(index).ListIndex '取操作的datacombo的listindex         For i = 0 To UBound(dco_Cnumber) ——这里的我改正了 
                  DataCombo(i).ListIndex = intTemp  '全部datacombo的listindex 相同 
             Next i        blnIsClick =false
        end ifEnd Sub 
    datacombo要改成你自己的名字 
    和下面一样修改 
      

  10.   

    dim blnIsClick as booleanPrivate Sub dco_Cnumber_click(index As Integer)————这里出错 
        Dim intTemp As Integer 
        Dim i As Integer 
        
        if not blnIsClick then  '加一个判断,防止相互调用 
            blnIsClick=true         intTemp = DataCombo(index).ListIndex '取操作的datacombo的listindex         For i = 0 To UBound(dco_Cnumber) ——这里的我改正了 
                  DataCombo(i).ListIndex = intTemp  '全部datacombo的listindex 相同 
            Next i         blnIsClick =false 
        end if End Sub 
    datacombo要改成你自己的名字 
    和下面一样修改 
      

  11.   

    这样也不行读取不到 数据库的数据  DataCombo 下拉列表是空的