treeview 数据库的结合

来源:互联网 发布:nodejs和java哪个好 编辑:程序博客网 时间:2024/06/12 01:11

由于我的treeview比较大,变化频繁,所以没有用递归。

void _ado_treeview::loadtree()//装载treeview
{
   PMyRec  MyRecPtr;
   Form1->TreeView1->Items->Clear();
   Form1->TreeView1->Items->BeginUpdate();//禁止更新,等数据处理完成后再更新

   TADOQuery *dquery = new TADOQuery((TComponent *)NULL);   //
   dquery->Connection =Form1->ADOConnection1;               //

  String x="select * from 树目录管理表 order by aID";//aID是节点在TreeView中的绝对索引,用来保存位置
  dquery->SQL->Add(x);
  dquery->Open();
  dquery->First();
  while (!dquery->Eof)
    {
        MyRecPtr = new TMyRec;//TMyRec是一个结构,后面给出定义
        MyRecPtr->shuxing = dquery->FieldByName("属性")->AsString;
        MyRecPtr->id = dquery->FieldByName("id")->AsString;
        MyRecPtr->Father_id=dquery->FieldByName("Father_id")->AsString;

        if(dquery->FieldByName("Father_ID")->AsString.IsEmpty())  //所有根节点的Father_ID均为空
          Form1->TreeView1->Items->AddChildObject(NULL,dquery->FieldByName("nametext")->AsString,MyRecPtr);
        else
        {  //如果不是根节点,则查找父节点加上
            for(int i=0;i<Form1->TreeView1->Items->Count;i++)
            {
               if(dquery->FieldByName("Father_ID")->AsString==PMyRec(Form1->TreeView1->Items->Item[i]->Data)->id)
                {
                  Form1->TreeView1->Items->AddChildObject(Form1->TreeView1->Items->Item[i],dquery->FieldByName("nametext")->AsString,MyRecPtr);
                  break;
                }
            }
        }
        dquery->Next();
    }
    delete dquery;

    Form1->TreeView1->Items->EndUpdate();//
    if(Form1->TreeView1->Items->Count>0)Form1->TreeView1->Items->Item[0]->Selected=true;
}
///////下面是MyRec的定义
typedef struct MyRec   //对应数据表中的shuxing-属性,Father_id对应Father_id
{                      //              id对应ID
  AnsiString shuxing;//shuxing-该节点的属性是表、部门、员工等 ,已备点击调用
  AnsiString Father_id; //父节点-当拖动时改变
  AnsiString id;  //本节点-永远不变且没有重复,可以作为数据检索条件

} TMyRec;