怎样把treeview的内容保存到数据库,数据库表怎样建比较好,给出例子

解决方案 »

  1.   

    要想把treeview保存到数据库 前提是你的treeview最好是根据数据库动态创建 数据库的最好是ID PID类型 也就是设置父ID如果你想省力 有专门的捆绑控件
      

  2.   

    ExpressQuantumGrid中的TdxDBTreeList  你试一下
      

  3.   

    function  DataSetToTreeNode(mDataSet:  TDataSet;
       mFieldNameParent:  string;  //父节点标识字段名
       mFieldNameTreeText:  string;  //节点文本字段名
       mFieldNameTreeId:  string;  //节点标识字段名
       mTreeView:  TTreeView;  mTreeNode:  TTreeNode;
       mParentText:  string):  Boolean;  
    var  
       vTreeNode:  TTreeNode;  
       vFieldValues:  Variant;  
       vFieldNames:  string;  
    begin  
       Result  :=  False;  
       if  not  Assigned(mDataSet)  then  Exit;  
       if  not  Assigned(mTreeView)  then  Exit;  
       if  not  mDataSet.Active  then  Exit;
      // mTreeView.Items.Clear;
       vFieldNames  :=  Format('%s;%s;%s',  
           [mFieldNameParent,  mFieldNameTreeText,  mFieldNameTreeId]);  
       mDataSet.Filtered  :=  False;  
       mDataSet.Filter  :=  Format('%s=%s',  [mFieldNameParent,  QuotedStr(mParentText)]);  
       mDataSet.Filtered  :=  True;  
       if  mDataSet.RecordCount  =  0  then  Exit;  
       mDataSet.First;
       while  not  mDataSet.Eof  do  begin
           vTreeNode  :=  mTreeView.Items.AddChild(mTreeNode,
               mDataSet.FieldByName(mFieldNameTreeText).AsString);
           vTreeNode.ImageIndex  :=mDataSet[mFieldNameTreeId];
           vFieldValues  :=  mDataSet[vFieldNames];  
           DataSetToTreeNode(mDataSet,  mFieldNameParent,  mFieldNameTreeText,  
               mFieldNameTreeId,  mTreeView,  vTreeNode,  
               mDataSet.FieldByName(mFieldNameTreeId).AsString);  
           ///////Begin  恢复位置  
           mDataSet.Filtered  :=  False;  
           mDataSet.Filter  :=  Format('%s=%s',  [mFieldNameParent,  QuotedStr(mParentText)]);
           mDataSet.Filtered  :=  True;  
           mDataSet.Locate(vFieldNames,  vFieldValues,  []);  
           ///////End  恢复位置  
           mDataSet.Next;  
       end;
       Result  :=  True;  
    end;
      

  4.   

    建议的表结构父   子   值101   10101  'abc'
    10101 1010101处理方法 可以考虑递归
    如果编码像上面那样的规律,可以不用递归
      

  5.   

    我是这样设的:
      ID:
      ParentID:父节点ID
      name:用来保存数据查询的FieldName
      level:节点层号:0、1、2、3、4....
      其它的看需要来定