1 (edited by adiziktdy 2019-05-06 09:43:27)

Topic: Фильтр для дочерней ветки TreeView

Выбор значения для фильтра осуществляется через ComboBox. Проблема в том, что для главной родительской ветки (ParentID=NULL) всё работает без проблем, а для остальных дочерних  - отбора нет. Пусто.

procedure Form1_ComboBox3_OnChange (Sender: TObject);
begin
    if Form1.ComboBox3.dbItemID<>-1 then
    begin
    idHero:=Form1.ComboBox3.dbItemID;
    Form1.TreeView1.dbFilter:='id_hero='+IntToStr(idHero);
   end
   else begin
        Form1.TreeView1.dbFilter := '';
   end;
        Form1.Caption := Form1.TreeView1.dbFilter;
        Form1.TreeView1.dbUpdate;
end;

Не пойму причину.

Yana

Re: Фильтр для дочерней ветки TreeView

Для того, чтобы дерево после фильтрации корректно отображалось, необходимо, чтобы для каждого отображаемого узла был доступен его родитель. Если в процессе фильтрации родители скрываются, то дети не отображаются.

Если объём фильтруемых данных небольшой, то, возможно, вам поможет статья "Урок анатомии", глава "Программная фильтрация дерева" - https://vk.com/@createmyvisualdatabasea … sia-dereva  в которой описан способ фильтрации древовидных данных с помощью скрипта.

Визуальное программирование: блог и телеграм-канал.

Re: Фильтр для дочерней ветки TreeView

k245 wrote:

Если объём фильтруемых данных небольшой, то, возможно, вам поможет статья "Урок анатомии", глава "Программная фильтрация дерева"

Спасибо, помогло.

Странно, но сегодня вдруг перестало закрываться окно ввода/редактирования дерева Form1.treeview1.dbpopupmenu.items[2], хотя стоит галка на свойствах кнопки "Сохранить" - Закрыть текущую форму после сохранения. Принудительное закрытие fTree.Сlose скриптом эффекта также не принесло.

Yana