Перейти к содержанию
  • 0
Legended

Экспорт в файл/импорт из файла.

Вопросы

Собственно как это можно сделать?

P.S.

Сохранить то получается (с нужными данными), а вот как воссоздать дерево из файла уже всю голову сломал...

Как сохраняю:

Использую json (superobject), в цикле пробегаюсь по всем item'ам сохраняя их text и level.

Поделиться сообщением


Ссылка на сообщение

Рекомендуемые сообщения

  • 0

покажи файл который получился

{
    "UPDATED": "",
    "DATA": {
        "1": {
            "level": 1,
            "text": "ITEM1"
        },
        "2": {
            "level": 2,
            "text": "ITEM1_SUB1"
        },
        "3": {
            "level": 1,
            "text": "ITEM2"
        },
        "4": {
            "level": 2,
            "text": "ITEM2_SUB1"
        },
        "5": {
            "level": 2,
            "text": "ITEM2_SUB2"
        },
        "6": {
            "level": 2,
            "text": "ITEM2_SUB3"
        },
        "7": {
            "level": 2,
            "text": "ITEM2_SUB4"
        },
        "8": {
            "level": 1,
            "text": "ITEM3"
        }
    }
}

Поделиться сообщением


Ссылка на сообщение
  • 0

кажется такой подход будет удобней

 

DATA - массив

{ 
   "UPDATED":"",
   "DATA":[ 
      { 
         "ItemIndex":1,
         "text":"ITEM1",
         "parent":0
      },
      { 
         "ItemIndex":2,
         "text":"ITEM1_SUB1",
         "parent":1
      }
   ]
}

Поделиться сообщением


Ссылка на сообщение
  • 0

 

кажется такой подход будет удобней

 

DATA - массив

{ 
   "UPDATED":"",
   "DATA":[ 
      { 
         "ItemIndex":1,
         "text":"ITEM1",
         "parent":0
      },
      { 
         "ItemIndex":2,
         "text":"ITEM1_SUB1",
         "parent":1
      }
   ]
}

Ну ок, а как из этого всего теперь дерево воссоздать в runtim'е?

Отредактировал My War

Поделиться сообщением


Ссылка на сообщение
  • 0

я показал пример, дальше по такой же схеме.

учтите что левелы нужно самому проверять.

чем больше вложенностей, тем больше будет левелов

Поделиться сообщением


Ссылка на сообщение
  • 0

я показал пример, дальше по такой же схеме.

учтите что левелы нужно самому проверять.

чем больше вложенностей, тем больше будет левелов

Ну так я и пытаюсь универсальный способ написать...

Поделиться сообщением


Ссылка на сообщение
  • 0

Получилось написать, работает на всех уровнях.

 

Экспорт

procedure ExportFromTreeView(Path: String; TreeView: TTreeView);
var
  Generated: ISuperObject;
  Counter: Integer;
  I: TTreeViewItem;
begin
  if
   not
    Assigned(TreeView)
  then
    Exit;
  {
  }
  TreeView.ExpandAll;
  Generated := SO('{"Data": []}');
  {
  }
  for
    Counter := 0
  to
    TreeView.GlobalCount - 1
  do
  begin
    I := TreeView.ItemByGlobalIndex(Counter);
    Generated.A['Data'].Add(SO(['text', I.Text, 'level', I.Level]));
  end;
  {
  }
  Generated.SaveTo(path, True);
end;

Импорт

procedure ImportToTreeView(Path: String; TreeView: TTreeView);
var
  I,
  Last: TTreeViewItem;
  ImportData,
  S: ISuperObject;
begin
  if
   not
    Assigned(TreeView)
  then
    Exit;

  ImportData := TSuperObject.ParseFile(Path, False);

  if
   not
    Assigned(ImportData)
  then
    Exit;
  {
  }
  TreeView.Clear;
  {
  }
  for
    S
  in
    ImportData['Data']
  do
  begin
    I := TTreeViewItem.Create(nil);
    I.Text := S.S['text'];
    case S.I['level'] of
      1: TreeView.AddObject(I);
      else
      begin
        if
          S.I['level'] > Last.Level
        then
          Last.AddObject(I)
        else
          if
            S.I['level'] = Last.Level
          then
            Last.ParentItem.AddObject(I)
          else
            Last.ParentItem.ParentItem.AddObject(I);
      end;
    end;
    Last := I;
  end;
  {
  }
  TreeView.ExpandAll;
end;

P.S.Сорри за мой кодстайл, но думаю суть поймете.

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...