我有三张表nj.db/bj.db/studentinfo.db
1、应该怎么设计结构?
2、我想显示的结果应是如下:用treeview怎么实现?
我校名字
一年级
一(1)班
学生A姓名
学生B姓名
...
一(2)班
学生A姓名
学生B姓名
...
二年级
...
3、有没有相关的案例代码?
4、我应该了解哪些方面?
1、应该怎么设计结构?
2、我想显示的结果应是如下:用treeview怎么实现?
我校名字
一年级
一(1)班
学生A姓名
学生B姓名
...
一(2)班
学生A姓名
学生B姓名
...
二年级
...
3、有没有相关的案例代码?
4、我应该了解哪些方面?
create table t
(
id varchar(10) not null,
mc varchar(36) not null, --年级名/班级名/学生名
sjid varchar(10) null, --上级id
)
写一个递归实现树结构
PID保存父ID
SName节点名称ID PID FCaption
001 0000 一年级
002 001 一(1)班
003 002 学生A姓名
...
120 001 一(2)班
....
220 0000 二年级
....
结构设计是这样:
编号 名称
01 一年级
0101 一(1)班
0102 一(2)班
0103 一(3)班
...
02 二年级
0201 二(1)班
0202 二(2)班
...用下面的代码能在treeview显示出班级
procedure TfrmStudentManage.FormShow(Sender: TObject);
const
ID_DEPT = 2;
var
nLevel: Integer;
pNodes: array[0..1023] of TTreeNode;
lpID, lpName: string;
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'SELECT * FROM [班级树] ORDER BY [编号]';
ADODataSet1.Open;
pNodes[0] := nil;
MTrView.Items.Clear;
with ADODataSet1.Recordset do
while not Eof do
begin
lpID := Fields['编号'].Value;
lpName := Fields['名称'].Value;
nLevel := Length(lpID) div ID_DEPT;
pNodes[nLevel] := MTrView.Items.AddChild(pNodes[nLevel - 1], lpName);
MoveNext;
end;
end;我想请朋友们帮我继续进行以下的工作:
1、怎么追加学生姓名到子节点下?(我的想法不知对不对:用遍历读取学生基础信息表的学生姓名,判断所在班级编号,编号实现自动加1。如学生A是二(1)班,则在class表中加入一个记录:编号是020201,名称是学生姓名)?这个过程怎么实现?
2、根据当前选择的节点,在dbgrid中显示对应的记录(相当于是过滤)?怎么实现?
包括插入记录更新记录都在这张表中,而等数据要导出或者分析时,然后用SQL语句进行表的拆分,更新到主从表中去
谁有dbtree的例子?
设置DataSource为那个表
设置ID为表的主键
设置ParentID为表的父ID
设置DisplayField为显示文本的那个字段
然后把数据集Open,然后自动填充好了
上面的几个属性名称会有出入,大概意思明白就行,DBTree就是设计成这样的
(所以经常要把表的如上几个绑定的字段进行合并,最好加上冗余字段,方便数据分离)