我已经实现了通过ADO方式从Access数据库中读出数据形成Tree View,
做法如下:
在数据库中用 ID, ParentID, ItemName, HasSubTree四个字段去
表示一个Item,然后通过一个递归函数去遍历添加这个TreeView,但
我在试图通过对TreeView的操作向数据库中添加记录时遇到困难,我
如何才能知道我从TreeView中选择的Item所对应的是数据库中的那一
条记录?因为一个父节点有可能有两个完全相同的子节点,请各位指
教点拨,感激不尽!!
做法如下:
在数据库中用 ID, ParentID, ItemName, HasSubTree四个字段去
表示一个Item,然后通过一个递归函数去遍历添加这个TreeView,但
我在试图通过对TreeView的操作向数据库中添加记录时遇到困难,我
如何才能知道我从TreeView中选择的Item所对应的是数据库中的那一
条记录?因为一个父节点有可能有两个完全相同的子节点,请各位指
教点拨,感激不尽!!
我试着在InsertItem的时候将数据库中Item的ID放在lParam中,
不知道为什么不能再得到这个参数,可不可以麻烦将代码片段
给我参考一下,多谢这两次的热心帮助,上次的帮助我已经给
分了。
prop->Propid=ID;
ht=tree.InsertItem(
TVIF_TEXT|TVIF_PARAM,
ItemName,
0,
0,
0,
0,
(LPARAM)prop,
NULL,
NULL);
prop->ht=ht;
prop->next=NULL; m_PropList.Add(prop);//加入链表
读的时候:
struct PROPERTY *prop=(struct PROPERTY*)item.lParam;
AfxMessageBox(prop->Propid);你读不出来可能是你定义的变量已经释放了。
例如你在func1()中
int id=5;
然后lParam指向id,其实这时候存放的是id的地址。
离开func1()时候,因为临时变量被删除了。
当在fun2()中,你读lParam的时候,id已经是其他值了。
所以,要注意你传进去参数的有效范围。比如是你类的变量就可以显示。
如果是new的话。你树删除的时候,要把所有new出来的变量都删了。
我发现我没有办法得到值的原因是在InsertItem的时候没有加TVIF_PARAM的Mask,
真是够笨蛋的,我倒是觉得没有必要自己定义结构,每次去取ItemData就好了,多
谢您热心帮助。