我做的一个软件。我想点击添加课程按钮,只在树形控件中添加一个新结点(都在第一层中)。点击添加班级,不管当前选中是子结点还是父结点都在当前父结点下添加一个结点。(也就是添加的结点都在第二层中) 结点层次共两层。 ADO连接ACCESS数据库读取结点。 哪位高手可能指点一下,或者给点代码。
QQ:9828453 E:[email protected]
先送100分,不够再送!!!!!
QQ:9828453 E:[email protected]
先送100分,不够再送!!!!!
解决方案 »
- 请问delphi怎么加密解密xml?
- 关于SQL语句在DELPHI中使用的不同之处
- 不耻下问:如何组织一个中小型的delphi项目?送全部的分,舍不得孩子套不来狼啊。
- 错在哪里?
- 将SQL表数据插入到VForpro表中 很急先谢了(100分)不够在加!!
- 请帮我看看这个错是怎么回事啊? 。。。:(
- 急求助~~关于抽样率!!!
- TcxGridTableView 不能显示小数的问题???
- 关于locate的问题?
- 在delphi不同窗体中调用dm中的adoquery,不同的窗体执行不同的SQL代码
- 两个 TDate 类型变量的“差”怎么求——————在线等待!!!!
- VB中用数据管理器VisData建ACCESS数据库,DELPHI7中用什么建ACCESS数据库?
Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, DB, Forms, Dialogs;function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);implementation
function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
var
ThisNode, Node: TTreeNode;
I: Integer;
begin
Node := nil; //nil = level 0 has no parent node
//this is checked by TreeFindItem
for I := 0 to Itemlist.count -1 do
begin
ThisNode := TreeFindItem(Sender, node, Itemlist[i]); //查找当前是否有此值
if ThisNode <> nil then Node := ThisNode else
begin
if I < Itemlist.count -1 then
begin
if I = 0 then Node := Sender.items.Add(Node, Itemlist[i])
else Node := Sender.items.AddChild(Node, Itemlist[i]);
end else
begin
if I = 0 then Node := Sender.items.AddObject(Node, Itemlist[i], Book)
else Node := Sender.items.AddChildObject(Node, Itemlist[i], Book);
end;
Node.stateIndex := Node.level + 1;
if Resort and (Node.parent <> nil) then Node.parent.alphasort;
end;
end;
Result := Node;
end;function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
begin
if NodeItem = nil then NodeItem := Sender.items.getfirstnode
else NodeItem := NodeItem.getfirstchild;
//NodeItem is now the first item of the desired level
//if this level has no items, NodeItem is nil if (NodeItem <> nil) and (NodeItem.text <> Name) then
repeat
NodeItem := NodeItem.getnextsibling;
until (NodeItem = nil) or (NodeItem.text = Name);
Result := NodeItem;
end;function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
begin
Result := TreeAddItem(Sender, Itemlist, nil, false);
end;procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
var
Node, Parent: TTreeNode;
begin
Node := TreeGetItem(Sender, ItemList);
while Node.level >= Level do
begin
Parent := Node.parent;
Node.delete;
if (Parent = nil) or (Parent.hasChildren) then break;
Node := Parent;
end;
end;
end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DB, DBTables, ComCtrls, Grids, DBGrids, ExtCtrls,
DBCtrls, Mask;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
ImageList1: TImageList;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
Label1: TLabel;
Label2: TLabel;
DBEdit2: TDBEdit;
Table1: TTable;
Label3: TLabel;
DBNavigator1: TDBNavigator;
Label4: TLabel;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
function GetFieldList: TStringList;
procedure FormCreate(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure DataSource1StateChange(Sender: TObject);
procedure Table1AfterInsert(DataSet: TDataSet);
procedure Table1BeforeDelete(DataSet: TDataSet);
procedure Table1BeforeEdit(DataSet: TDataSet);
procedure Table1AfterDelete(DataSet: TDataSet);
procedure Table1AfterPost(DataSet: TDataSet);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;var
Form1: TForm1;
FieldList: TStringList;implementation
uses TreeFunc;{$R *.DFM}
function TForm1.GetFieldList: TStringList;
begin
FieldList.clear;
FieldList.add(Table1.fieldbyname('Country').asstring);
FieldList.add(Table1.fieldbyname('city').asstring);
FieldList.add(Table1.fieldbyname('Company').asstring);
Result := FieldList;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FieldList := TStringList.create; TreeView1.items.BeginUpdate; Table1.first;
while not Table1.eof do
begin
TreeAddItem(TreeView1, GetFieldList, Table1.getBook, false);
Table1.next;
end; FieldList.clear;
TreeView1.Alphasort;
TreeView1.items.Endupdate;//make first record selected:
TreeView1.items[2].selected := true;
end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
Datasource1.enabled := Node.data <> nil;
if DataSource1.enabled then Table1.gotobook(node.data);
end;procedure TForm1.DataSource1StateChange(Sender: TObject);
var
ItemList: TStringList;
Node: TTreeNode;
begin
end;procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
FieldList.clear;
end;procedure TForm1.Table1BeforeDelete(DataSet: TDataSet);
begin
GetFieldList;
end;procedure TForm1.Table1BeforeEdit(DataSet: TDataSet);
begin
GetFieldList;
end;procedure TForm1.Table1AfterDelete(DataSet: TDataSet);
var
CascadeDeleteLevel: Integer;
begin
CascadeDeleteLevel := 0;
TreeDeleteItem(TreeView1, FieldList, CascadeDeleteLevel);
end;procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
TreeView1.items.beginUpdate; if FieldList.count > 0 then TreeDeleteItem(TreeView1, Fieldlist, 0);
TreeView1.selected := TreeAddItem(TreeView1, GetFieldlist, Table1.getbook, True); TreeView1.items.endUpdate;
end;end.
treefunction 为功能FUNCTION UNIT1为调用;数据库为delphi 自带例子