我已经实现了通过ADO方式从Access数据库中读出数据形成Tree View,
做法如下:
在数据库中用 ID, ParentID, ItemName, HasSubTree四个字段去
表示一个Item,然后通过一个递归函数去遍历添加这个TreeView,但
我在试图通过对TreeView的操作向数据库中添加记录时遇到困难,我
如何才能知道我从TreeView中选择的Item所对应的是数据库中的那一
条记录?因为一个父节点有可能有两个完全相同的子节点,请各位指
教点拨,感激不尽!!

解决方案 »

  1.   

    HTREEITEM和你数据库中的ID都是唯一的。看能不能通过HTREEITEM取得对应的ID.
      

  2.   

    To 52001314:
    我试着在InsertItem的时候将数据库中Item的ID放在lParam中,
    不知道为什么不能再得到这个参数,可不可以麻烦将代码片段
    给我参考一下,多谢这两次的热心帮助,上次的帮助我已经给
    分了。
      

  3.   

    struct PROPERTY *prop=new struct PROPERTY;//自定义的结构体,包含HTREEITEM,ID和指向下一个的指针
    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出来的变量都删了。
      

  4.   

    To 52001314:
    我发现我没有办法得到值的原因是在InsertItem的时候没有加TVIF_PARAM的Mask,
    真是够笨蛋的,我倒是觉得没有必要自己定义结构,每次去取ItemData就好了,多
    谢您热心帮助。