|
|
|
Помгите чайцнику зполнить TreeView
|
|||
|---|---|---|---|
|
#18+
Суть проблемы в следущем из базы получаю список групп которые могут содержать вложенные подгруппы, а могут и не содержать их мне надо разместить это в treeview хотябы подскажите как оно вообще заполняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 16:56 |
|
||
|
Помгите чайцнику зполнить TreeView
|
|||
|---|---|---|---|
|
#18+
Написал я как то раз один алгоритм, чесно говоря уже не помню принципа но работает. Т.е. есть таблица или запрос - флгоритм читает таблицу по порядку сверху вниз и каждую запись (а к каждой записи есть поле с циферкой, обозначающей Level т.е. уровень) и попорядку раскладывает их в дерево. вот код: { int d = 0; int r = 0; int p = 0; int w = 0; int s = 0; int q = 0; int n = 1; int f = 0; int m = 0; int k = 0; int z = 0; Form8->CGauge1->Progress = 0; TreeView1->Items->Clear(); TreeView1->Items->Add(NULL,"ЭРИ"); ADOQuery1->First(); Form8->Label1->Caption = "Построение дерева..."; Form8->Label1->Visible =true; int tr1b = 1; while(tr1b<ADOQuery1->RecordCount) { tr1b++; Form8->CGauge1->Progress = ADOQuery1->RecordCount*tr1b/100; switch(ADOQuery1->Fields->FieldByName("Number")->AsInteger) { case 0: f = m+n+p+s+d+z; n++; TreeView1->Items->AddChild(TreeView1->Items->Item[0],ADOQuery1->Fields->FieldByName("ERI")->AsString); break; case 1: q = m+n+p+s+d+z; m++; TreeView1->Items->AddChild(TreeView1->Items->Item[f],ADOQuery1->Fields->FieldByName("ERI")->AsString); break; case 2: p++; w = m+n+p+s+d+z; TreeView1->Items->AddChild(TreeView1->Items->Item[q],ADOQuery1->Fields->FieldByName("ERI")->AsString); break; case 3: r = m+n+p+s+d+z; s++; TreeView1->Items->AddChild(TreeView1->Items->Item[w-1],ADOQuery1->Fields->FieldByName("ERI")->AsString); break; case 4: k = m+n+p+s+d+z; d++; TreeView1->Items->AddChild(TreeView1->Items->Item[r],ADOQuery1->Fields->FieldByName("ERI")->AsString); break; case 5: TreeView1->Items->AddChild(TreeView1->Items->Item[k],ADOQuery1->Fields->FieldByName("ERI")->AsString); z++; } ADOQuery1->Next(); } TreeView1->Items->Item[0]->MakeVisible(); TreeView1->Enabled = true; } т.е. есть ADOTable и оттуда чиатюся данные. по вопросам ICQ:77655654, lyl8000@kengu.ru. я тоже из Н.Новгорода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 13:44 |
|
||
|
Помгите чайцнику зполнить TreeView
|
|||
|---|---|---|---|
|
#18+
Или можно на Expand узла выполнять запрос и вписывать дочерние узлы Такой алгоритм работает быстрее, так как открывает узлы только по запросу, ну и соответственно эффективнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2004, 17:51 |
|
||
|
Помгите чайцнику зполнить TreeView
|
|||
|---|---|---|---|
|
#18+
к Lellik: Пожалуйста подробнее. Есть сомнения, так как TTreeView для узлов, под которыми пусто, не рисует плюсика на котором делается Expand. Как же делать Expand? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2004, 18:20 |
|
||
|
Помгите чайцнику зполнить TreeView
|
|||
|---|---|---|---|
|
#18+
а я реализовал вот так: vibortovar->TreeView->Items->Clear(); for(int w=0;;w++){ int i = Main->FIBDataSet->RecordCount; //????? ?????? if(i<j)break;//Проверка на последнюю запись AnsiString a = Main->FIBDataSet->Fields->Fields[2]->AsString; int RID = Main->FIBDataSet->Fields->Fields[0]->AsInteger; i = RID; int PARETN_REF = Main->FIBDataSet->Fields->Fields[1]->AsInteger; switch (PARETN_REF) { case 0:{//первый элемент TreeView->Items->AddChildFirst(NULL,a); Main->FIBDataSet->Next(); break; } case 1:{//корневые группы TreeView->Items->AddChild(TreeView->Items->Item[0],a); R[RID]= z;z++; Main->FIBDataSet->Next(); break; } default:{//все остальные имеющие родителя из корневой группы или из погруппы R[RID]= z;z++; q = R[PARETN_REF]; TreeView->Items->AddChild(TreeView->Items->Item[q],a); Main->FIBDataSet->Next(); break; } } j++; } Main->FIBTransaction->Active = false; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2004, 09:32 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2034828]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
6ms |
get first new msg: |
3ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 289ms |

| 0 / 0 |
