欢迎进来讨论:listbox的itemdata关联到一个结构数组的问题。
这是书上的一个例子,使用Listbox的ItemData属性作为进入另一个结构的序号。
假定已有一个产品名称和说明的列表:
type ProductUDT
Name as string
Description as string
Price as Currency
end type
dim Products() as ProductUDT, i as long
private sub form_load()
'从数据库中读产品信息到products(), 代码略。
'读产品名称到已设置排序的listbox:
for i=lbound(products) to ubound(products)
lstProducts.Additem Products(i).Name
'设置ItemData与products()的下标相对应:
lstProducts.ItemData(lstProducts.NewIndex)=i
next
end sub
Private sub lstProducts_click()
'显示选定产品的说明及单价:
i=lstProducts.ItemData(lstProducts.ListIndex)
lblDescription.Caption=Products(i).Description
lblPrice.Caption=Products(i).Price
end sub
上面这段程序的功能应该很清楚了。实现也没有什么问题。看上去挺合理的。
而我现在的疑问是,产品的记录集可能会变化的,比如经过几次增加与删除之后,lstProducts.itemdata的值就可能不连续了,与数组的下标怎么保持对应呢?
记录集的每次删除动作,都跟一个重新填写products()数组和lstproducts列表的动作吗?不太好吧?
如果不用数组改用集合来存放产品信息,那么,删除产品时好处理一点,新增产品时,itemdata不太好确定了,要遍历每项itemdata的值,找出最大的,再加一?感觉效率上不是很好。不考虑用产品名作为itemdata的值。因为记录集不一定是产品记录,可能是别的,第一列不一定是主键或唯一记录。
大家看看有没有什么好的点子?
谢谢回复。