欢迎进来讨论:listbox的itemdata关联到一个结构数组的问题。

victorycyz 2004-04-16 10:51:27

这是书上的一个例子,使用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的值。因为记录集不一定是产品记录,可能是别的,第一列不一定是主键或唯一记录。

大家看看有没有什么好的点子?

谢谢回复。
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjb_netboy 2004-04-23
  • 打赏
  • 举报
回复
当删除,增加,后,itemdata的值就可能不连续了,怎么遍历呀,我是用的remove topindex的方法遍历,我想知道,能否有更好的方法。
cxyOOOO 2004-04-20
  • 打赏
  • 举报
回复
我的思路, 自己定义个集合类, 在类的Add方法中定义一个static整型变量,

看例子意思似乎是只要有唯一的产品ID可与listbox的item的itemdata对应就行了,

不知可否
xjb_netboy 2004-04-20
  • 打赏
  • 举报
回复
我觉得,用.tag附加属性比较好
xjb_netboy 2004-04-19
  • 打赏
  • 举报
回复
请问楼主,如果你的lstProducts.ItemData(lstProducts.NewIndex)=i
i不是从0开始,你怎么处理
victorycyz 2004-04-17
  • 打赏
  • 举报
回复

楼上的张郎,你问的事情与本贴无关,你可以直接给陈建华留言。不要贴在这里,影响此贴的讨论。
boyzhang 2004-04-16
  • 打赏
  • 举报
回复
GZ

楼上的,上次为什么无缘无故给我170分呀!

我一向无功不受禄的!

虽然我现在才4个角角,分又少! :)

可是,这是为的那一出呀,总要告诉我吧!

华芸智森 2004-04-16
  • 打赏
  • 举报
回复
用数组下标虚拟链表来处理应该没问题。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧