我有三张表nj.db/bj.db/studentinfo.db
1、应该怎么设计结构?
2、我想显示的结果应是如下:用treeview怎么实现?
我校名字
    一年级
       一(1)班
          学生A姓名
          学生B姓名
          ...
       一(2)班
          学生A姓名
          学生B姓名
          ...
    二年级
       ...
3、有没有相关的案例代码?
4、我应该了解哪些方面?

解决方案 »

  1.   

    写一张表里也行
    create table t
    (
     id    varchar(10)  not null,
     mc    varchar(36)  not null,  --年级名/班级名/学生名
     sjid  varchar(10)      null,  --上级id
    )
    写一个递归实现树结构
      

  2.   

    用一张表就可以了ID保存节点的ID,
    PID保存父ID
    SName节点名称ID   PID   FCaption
    001  0000  一年级
    002  001   一(1)班
    003  002   学生A姓名
    ...
    120  001   一(2)班
    ....
    220  0000  二年级 
    ....
      

  3.   

    可不可以再具体一点,窗体上还有个DBGRID用于显示选中节点下的学生信息,用treeview怎么显示数据库中的学生我还不懂,从没用过treeview,看到好多管理系统中用到了这种方试,但我不知道自己能不能实现。
      

  4.   

    数据表data.mdb/class
    结构设计是这样:
    编号     名称
    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中显示对应的记录(相当于是过滤)?怎么实现?
      

  5.   

    向来我的做法是使用DBTree或者DBTreeList,为了这个显示模式建立一张表,如一楼所说
    包括插入记录更新记录都在这张表中,而等数据要导出或者分析时,然后用SQL语句进行表的拆分,更新到主从表中去
      

  6.   

    我才看到有dbtree控件的下载,在盒子论坛下到的,但还不知道怎么用,有没有现成的代码或例子,没用过所以不知道。
    谁有dbtree的例子?
      

  7.   

    不用例子,几个属性就可以了
    设置DataSource为那个表
    设置ID为表的主键
    设置ParentID为表的父ID
    设置DisplayField为显示文本的那个字段
    然后把数据集Open,然后自动填充好了
    上面的几个属性名称会有出入,大概意思明白就行,DBTree就是设计成这样的
    (所以经常要把表的如上几个绑定的字段进行合并,最好加上冗余字段,方便数据分离)