现在本小生用treeview可以来显示数据库中的信息,敢问如何将其保存会数据库表中
表结构如下:mid(节点序号,此为一次递增的),caption(节点描述),parentid(父节点序号),index(同级序号)
再树中我只显示caption中的内容,如果我对树进行了操作,比如对树上多个节点的caption做了更改,如何将改后整个树的信息在存回数据库表中?
不知道说清楚没有,希望各路大侠多多帮忙!!
表结构如下:mid(节点序号,此为一次递增的),caption(节点描述),parentid(父节点序号),index(同级序号)
再树中我只显示caption中的内容,如果我对树进行了操作,比如对树上多个节点的caption做了更改,如何将改后整个树的信息在存回数据库表中?
不知道说清楚没有,希望各路大侠多多帮忙!!
先把mid存在TreeNode.data里
TreeNode1:=tv1.getfirstnode;
while TreeNode1<>nil do begin
if table1.locate('mid',Integer(TreeNode1.data),[]) then begin
table1.edit;
table1.fieldbyname('caption').asstring:=TreeNode1.caption;
table1.post;
end;
TreeNode1:=TreeNode1.GetNext;
end;
不知行不?
另參考一下幫助里的
GetHandleGetLastChild
GetNext
GetNextChild
getNextSibling
GetNextVisible
GetPrev
GetPrevChildgetPrevSibling
GetPrevVisible
可能有用
procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
var S: String);
begin
if table1.locate('mid',Integer(Node1.data),[]) then begin
table1.edit;
table1.fieldbyname('caption').asstring:=s;
table1.post;
end;
end;
------------------------------
PItem=^TPItem;
TPItem=Record
mid,parentid,index:Integer;
end;
{(节点序号,此为一次递增的),caption(节点描述),parentid(父节点序号),index(同级序号)}
---------------------------------------------
var
NodeL,ChildNode:TTreeNode;
x:PItem;
begin
inherited;
treList.Items.Clear;
NodeL:=treList.Items.Add(Nil,'树');
NodeL.ImageIndex:=2;
NodeL.SelectedIndex:=2;
DataSet.First;
while Not DataSet.Eof do
begin
New(x); //mid,parentid,index
x.mid:=DataSet.FieldBynaMe('mid').AsInteger;
x.index:=DataSet.FieldBynaMe('index').AsInteger;
x.parentid:=DataSet.FieldBynaMe('parentid').AsInteger;
ChildNode:=treList.Items.AddChildObject(NodeL,DataSet.FieldBynaMe('caption').AsString,Tobject(x)); //这样每个结点都保存有mid,parentid,index,操作起来就简单多了。
ChildNode.ImageIndex:=1;
ChildNode.SelectedIndex:=0;
DataSet.Next;
end;
TreList.TopItem.Expanded:=True;
end;
-----------------------------------------
取结点的mid,parentid,index时可能这样:
mid:=PItem(trelist.Selected.Data).mid;
parentid:=PItem(trelist.Selected.Data).parentid;
TreeView1.LoadfromFile(filename);你可以把这个文件保存到数据库中去,也可以把文件中的内容保存到数据库中去,剩下你自己做
type
pstr=^string;
Tmainfrm = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
ClientDataSet2: TClientDataSet;
DataSource2: TDataSource;
pnl_back: TPanel;
pnl_hand: TPanel;
Label2: TLabel;
Panel1: TPanel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
BitBtn2: TBitBtn;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
pnl_data: TPanel;
DBGrid2: TDBGrid;
pnl_left: TPanel;
TreeView1: TTreeView;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
pnl_top_main: TPanel;
lb_caption2: TLabel;
lb_caption: TLabel;
pnl_color: TPanel;
pnl_color2: TPanel;
pnl_color3: TPanel;
ClientDataSet3: TClientDataSet;
ClientDataSet4: TClientDataSet;
Splitter2: TSplitter;
Splitter1: TSplitter;
Panel5: TPanel;
MainMenu2: TMainMenu;
N1211: TMenuItem;
M1: TMenuItem;
N1: TMenuItem;
H1: TMenuItem;
Label1: TLabel;
ToolBar1: TToolBar;
ClientDataSet5: TClientDataSet;
SocketConnection1: TSocketConnection;
N2: TMenuItem;
N3: TMenuItem;
DataSource3: TDataSource;
ImageList1: TImageList;
ImageList2: TImageList;
ImageList3: TImageList;
procedure BitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure TreeView1Expanded(Sender: TObject; Node: TTreeNode);
procedure TreeView1Collapsed(Sender: TObject; Node: TTreeNode);
private
procedure genallcustomer(var i_level:integer);
function initial:boolean;
{ Private declarations }
public
{ Public declarations }
end;var
mainfrm: Tmainfrm;
cus_str:string;
implementationuses person;{$R *.dfm}
function Tmainfrm.initial:boolean;
begin
self.DateTimePicker1.DateTime:=now;
self.DateTimePicker2.DateTime:=now;
end;
procedure Tmainfrm.genallcustomer(var i_level:integer);
var
TNode:TTreeNode;
TFistrNode:TTreeNode;
TregionNode:TTreeNode;
I,J:Integer;
Fid,Fregion,Fname:string;
P:pstr;
begin
With self.ClientDataSet3 Do
Begin
Close;
CommandText:='SELECT Customer_Name,Region,Customer_No FROM Customer WHERE Customer_Level=:var1';
Params.ParamByName('var1').Value:='1';
Try
open;
Except
End;
End;
TFistrNode:=self.TreeView1.Items.AddChild(nil,'中鑫公司客户列表');
Fid:='000000';
Fname:='中鑫公司';
new(p);
p^:=Fid;
TregionNode:=self.TreeView1.Items.AddChildObject(TFistrNode,Fname,p);
For I:=0 To self.ClientDataSet3.RecordCount-1 Do
Begin Fid:=self.ClientDataSet3.Fields[2].Value;
Fregion:=self.ClientDataSet3.Fields[1].Value;
Fname:=self.ClientDataSet3.Fields[0].Value;
new(p);
p^:=Fid;
TregionNode:=self.TreeView1.Items.AddChildObject(TFistrNode,Fname,p);
With self.ClientDataSet4 Do
Begin
Close;
commandtext:='SELECT Customer_Name,Region,Customer_No FROM Customer WHERE Region=:var1 and Customer_Level<>:var2';
Params.ParamByName('var1').Value:=Fregion;
Params.ParamByName('var2').Value:='1';
Try
open;
Except
End;
For J:=0 To self.ClientDataSet4.RecordCount-1 Do
Begin
Fid:=self.ClientDataSet4.Fields[2].Value;
Fname:=self.ClientDataSet4.Fields[0].Value;
new(p);
p^:=Fid;
Tnode:=self.TreeView1.Items.AddChildObject(TregionNode,Fname,p);
self.ClientDataSet4.Next;
End;
End;
self.ClientDataSet3.Next;
End;
self.ClientDataSet4.Close;
self.ClientDataSet3.Close;
//--self.TreeView1.AutoExpand:=true;
end;procedure Tmainfrm.BitBtn1Click(Sender: TObject);
var
str1,str2:string;
begin
// showmessage(cus_str);
self.BitBtn2.Enabled:=false;
self.ClientDataSet2.Close;
self.ClientDataSet2.CommandText:='exec Query_All_About_End_Seller_my :var1,:var2,:var3,:var4,:var5,:var6,:var7,:var8,:var9';
with self.ClientDataSet2.Params do
begin
ParamByName('var1').Value:='';
ParamByName('var2').Value:='0109';
ParamByName('var3').Value:=cus_str;
ParamByName('var4').Value:='';
ParamByName('var5').Value:=formatdatetime('yyyymmdd',self.DateTimePicker1.Date);
ParamByName('var6').Value:=formatdatetime('yyyymmdd',self.DateTimePicker2.Date);
ParamByName('var7').Value:='0';
ParamByName('var8').Value:=str1;
ParamByName('var9').Value:=str2;
end;
self.ClientDataSet2.Open;
self.DBGrid2.DataSource:=self.DataSource2;
self.BitBtn2.Enabled:=true;
end;procedure Tmainfrm.FormShow(Sender: TObject);
VAR
fa:integer;
begin
fa:=1;
cus_str:='all';
genallcustomer(fa);
initial;
end;procedure Tmainfrm.TreeView1Click(Sender: TObject);
var
TTNode:TTreeNode;
begin
TTNode:=self.TreeView1.Selected;
if TTNode.Level=0 then
begin
cus_str:='all';
exit;
end;
cus_str:=Pstr(TTnode.Data)^;
// showmessage(cus_str);
end;end.