当前位置:编程学习 > VB >>

为什么无法取得Combo或List控件的值,老提示“无效属性数组索引”,ListIndex老是-1

环境如下
表格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 Sub

Private 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 Sub

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
    'Text1.Text = DataGrid1.Columns("客户ID").CellValue(DataGrid1.Bookmark)
    Text2.Text = "" & DataGrid1.Columns("客户姓名").CellValue(DataGrid1.Bookmark)
    Text4.Text = "" & DataGrid1.Columns("客户描述").CellValue(DataGrid1.Bookmark)
    Text5.Text = "" & DataGrid1.Columns("送货地址").CellValue(DataGrid1.Bookmark)
    Text3.Text = DataGrid1.Bookmark
    
    If ("" & DataGrid1.Columns("所属门店").CellValue(DataGrid1.Bookmark)) <> "" Then
    For i = 0 To Combo1.ListCount - 1
        If ("" & DataGrid1.Columns("所属门店").CellValue(DataGrid1.Bookmark)) = 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.Bookmark)) = 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.Bookmark)) = 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.Bookmark)   
End Sub

Private 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 If

End Sub


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

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

哪位大侠能给个例子。 Combo1.AddItem "类型名称1"
Combo1.ItemData(Combo1.NewIndex) = 1
Combo1.AddItem "类型名称2"
Combo1.ItemData(Combo1.NewIndex) = 2
没有项目被选择的时候就是-1,使用之前,先判断是否是-1
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,