为什么无法取得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 , 数据库(包含打印,安装,报表)