我是一个初学者,在用这个控件的时候遇到了一点问题请帮忙解答,怎么在程序运行的时候增加或修改子项.

解决方案 »

  1.   

    我也是个初学者,你看看吧,
    function  DataSetToTreeNode(mDataSet:  TDataSet;
       mFieldNameParent:  string;    //上级ID INE_SUPERIOR_ID
       mFieldNameTreeText:  string;  //名称   INE_NAME
       mFieldNameTreeId:  string;    //ID     INE_ID
       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;
       vFieldNames  :=  Format('%s;%s;%s',
           [mFieldNameParent,  mFieldNameTreeText,  mFieldNameTreeId]);
       mDataSet.Filtered  :=  False;
       if QuotedStr(mParentText) = '' Then
         mDataSet.Filter := Format('Not %s Is Null',[mFieldNameParent])
       else
         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).Value);
           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;procedure TForm9.FormShow(Sender: TObject);
    var
     LDir,DBPath,AppPath:String;
    begin
     with  DataSource1.DataSet do
      begin
        TreeView1.Items.Clear;
        DataSetToTreeNode(ADOTable1,  'INE_SUPERIOR_ID',  'INE_NAME',  'INE_ID',
                         TreeView1,  nil,  'NULL');
        ADOTable1.Filter  :=  '';
        end;
    end;procedure TForm9.TreeView1Change(Sender: TObject; Node: TTreeNode);
    var
      lStr,ID : string;
    begin
      lStr := Node.Text;
      ADOTable1.Locate('INE_Name',lStr,[loCaseInsensitive]);
      FNode := Node;
    end;