powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помгите чайцнику зполнить TreeView
5 сообщений из 5, страница 1 из 1
Помгите чайцнику зполнить TreeView
    #32545166
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть проблемы в следущем из базы получаю список групп которые могут содержать вложенные подгруппы, а могут и не содержать их мне надо разместить это в treeview хотябы подскажите как оно вообще заполняется
...
Рейтинг: 0 / 0
Помгите чайцнику зполнить TreeView
    #32546549
LYL8000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал я как то раз один алгоритм, чесно говоря уже не помню принципа но работает. Т.е. есть таблица или запрос - флгоритм читает таблицу по порядку сверху вниз и каждую запись (а к каждой записи есть поле с циферкой, обозначающей 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. я тоже из Н.Новгорода.
...
Рейтинг: 0 / 0
Помгите чайцнику зполнить TreeView
    #32547363
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или можно на Expand узла выполнять запрос и вписывать дочерние узлы
Такой алгоритм работает быстрее, так как открывает узлы только по запросу, ну и соответственно эффективнее
...
Рейтинг: 0 / 0
Помгите чайцнику зполнить TreeView
    #32549168
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к Lellik:
Пожалуйста подробнее.
Есть сомнения, так как TTreeView для узлов, под которыми пусто, не рисует плюсика на котором делается Expand. Как же делать Expand?
...
Рейтинг: 0 / 0
Помгите чайцнику зполнить TreeView
    #32551760
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я реализовал вот так:

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;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помгите чайцнику зполнить TreeView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]