环境如下
表格1:门店表jxc_deptcat
表格2:客户表jxc_customer
3个combo,一堆文本框,保存和修改两种按钮。使用datagrid控件读出数据,然后选择某一行的时候,将该行数据各项赋值给文本框和combo、list等控件。
不管是只有1个combo还是多个combo的窗体,读写数据都会时灵时不灵。或者其中一个combo的值能写入数据库,但另两个combo又变空白了。
本窗体的所属门店在数据库中专门有一个表格,里面有deptcat_id(int),deptcat_name(字符串)。我在combo的list中显示中文,然后再itemData中存储相应的id数字,客户表jxc_customer只存储deptcat_id。
客户类型则是直接在combo的list属性,加了“个人客户”、“单位客户”两种。
希望在修改时,可以自动将combo变为原来存储的数据(DataGrid1_RowColChange,怀疑是这里有问题,大家帮我看下改combo的语句有无错误)Private Sub Command2_Click()
    '修改
    Set Rs = Adodc1.Recordset
    Conn.BeginTrans
        Rs("客户姓名") = Text2.Text
        MsgBox ("性别:第" & List2.ListIndex & "项:" & List2.List(List2.ListIndex))
        For i = List2.ListCount - 1 To step - 1
            If List2.Selected(i) = True Then
                Rs("性别") = List2.List(List2.ListIndex)   '###20131016严重bug:ListIndex无法取值,总是-1
                'Rs("性别") = List2.List(i)
            End If
        Next i
        Rs("客户描述") = Text4.Text
        Rs("送货地址") = Text5.Text
        Rs("所属门店") = Combo1.ItemData(Combo1.ListIndex)
        MsgBox ("客户类型:第" & Combo2.ListIndex & "项:" & Combo2.List(Combo2.ListIndex))
        Rs("客户类型") = Combo2.List(Combo2.ListIndex)
        Rs("户口类型") = Combo3.List(Combo3.ListIndex)
        Rs("手机") = Text6.Text
        Rs.Update
    'Rs.Close
    If MsgBox("你确认修改吗?", vbQuestion + vbYesNo, "确认更改") = vbYes Then
        Conn.CommitTrans
    Else
        Conn.RollbackTrans
    End If
        
End SubPrivate Sub Command4_Click()
    '新增
    Set Rs = Adodc1.Recordset
    Rs.AddNew
    Rs("客户姓名") = Text2.Text
    Rs("性别") = List2.ItemData(ListIndex)
    Rs("客户描述") = Text4.Text
    Rs("送货地址") = Text5.Text
    Rs("所属门店") = Combo1.ItemData(Combo1.ListIndex)
    Rs("客户类型") = Combo2.List(Combo2.ListIndex)
    Rs("户口类型") = Combo3.List(Combo3.ListIndex)
    Rs("手机") = Text6.Text
    Rs.Update
End SubPrivate Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
    'Text1.Text = DataGrid1.Columns("客户ID").CellValue(DataGrid1.Book)
    Text2.Text = "" & DataGrid1.Columns("客户姓名").CellValue(DataGrid1.Book)
    Text4.Text = "" & DataGrid1.Columns("客户描述").CellValue(DataGrid1.Book)
    Text5.Text = "" & DataGrid1.Columns("送货地址").CellValue(DataGrid1.Book)
    Text3.Text = DataGrid1.Book
    
    If ("" & DataGrid1.Columns("所属门店").CellValue(DataGrid1.Book)) <> "" Then
    For i = 0 To Combo1.ListCount - 1
        If ("" & DataGrid1.Columns("所属门店").CellValue(DataGrid1.Book)) = Combo1.ItemData(i) Then
            Combo1.Text = Combo1.List(i)
            Combo1.ItemData(0) = Combo1.ItemData(i)
            MsgBox (Combo1.ItemData(i))
            Exit For
        Else
            Combo1.Text = ""
        End If
    Next
    End If
    
    For i = 0 To Combo2.ListCount - 1
            If ("" & DataGrid1.Columns("客户类型").CellValue(DataGrid1.Book)) = Combo2.List(i) Then
                Combo2.Text = Combo2.List(i)
                Combo2.ItemData(0) = Combo1.ItemData(i)
                Exit For
            Else
                Combo2.Text = ""
            End If
    Next
    
    For i = 0 To Combo3.ListCount - 1
            If ("" & DataGrid1.Columns("户口类型").CellValue(DataGrid1.Book)) = Combo3.List(i) Then
                Combo3.Text = Combo3.List(i)
                Combo3.ItemData(0) = Combo3.ItemData(i)
                Exit For
            Else
                Combo3.Text = ""
            End If
    Next
    Text6.Text = "" & DataGrid1.Columns("手机").CellValue(DataGrid1.Book)   
End SubPrivate Sub Form_Load()
'类别
Set Rs = Nothing
Rs.Open "select distinct deptcat_name ,deptcat_id from jxc_deptcat", Conn, adOpenKeyset, adLockOptimistic
If Not Rs.EOF Then
    Rs.MoveFirst
    '循环将每条记录值加入Combo控件
    For i = 0 To Rs.RecordCount - 1
    Combo1.AddItem CStr(Rs.Fields("deptcat_name")), i
    Combo1.ItemData(i) = Rs.Fields("deptcat_id")
    Rs.MoveNext
    Next
End IfEnd Sub
combo listindex

解决方案 »

  1.   

    Rs("性别") = List2.List(i)   '###20131016严重bug:ListIndex无法取值,总是-1
      

  2.   

    再顶一下。在修改记录的界面如何赋值给combo?
    需要赋值两个,一个是类型名称(中文),一个是类型ID(数字)。
    设想是类型名称存在.list属性内,ID存在.itemdata属性内哪位大侠能给个例子。
      

  3.   

    Combo1.AddItem "类型名称1"
    Combo1.ItemData(Combo1.NewIndex) = 1
    Combo1.AddItem "类型名称2"
    Combo1.ItemData(Combo1.NewIndex) = 2