Уважаемые, подскажите как синхронизировать содержимое xml и TreeView.
Как загрузить дерево из xml — понятно. Как сохранить дерево обратно тоже ясно. А как получить возможность во время работы програмы дергать данные из нужной ноды xml-файла, встав на ассоциированую ноду в дереве. Пока получается только элементарный перебор xml-файла. Те.е. встав на ноду в дереве получаем ее ID, идем в xml начинаем обходить все ноды, пока не наткнемся на подходящую с нужным ID, вот тогда-то и считываем из нее данные.
Видимо есть правильное решение, ибо структура и дерева и файла идентичны. Если у кого есть реализация на Delphi- подбростьте. Или хотя бы идею.
Здравствуйте, tesuji, Вы писали:
T>Уважаемые, подскажите как синхронизировать содержимое xml и TreeView.
T>Как загрузить дерево из xml — понятно. Как сохранить дерево обратно тоже ясно. А как получить возможность во время работы програмы дергать данные из нужной ноды xml-файла, встав на ассоциированую ноду в дереве. Пока получается только элементарный перебор xml-файла. Те.е. встав на ноду в дереве получаем ее ID, идем в xml начинаем обходить все ноды, пока не наткнемся на подходящую с нужным ID, вот тогда-то и считываем из нее данные.
T>Видимо есть правильное решение, ибо структура и дерева и файла идентичны. Если у кого есть реализация на Delphi- подбростьте. Или хотя бы идею.
Если нужно по указанному ноду дерева получить соостветствующий ему нод из xml, то при создании элемента тривьюва в lParam TVITEMа заноси указатель на соответствующий ему IXMLDOMElement. Потом его можно легко оттуда забрать. С Delphi не помогу, т.к. сам делал это на WTL в С++
Здравствуйте, bugmonster, Вы писали:
B>Если нужно по указанному ноду дерева получить соостветствующий ему нод из xml, то при создании элемента тривьюва B>в lParam TVITEMа заноси указатель на соответствующий ему IXMLDOMElement. Потом его можно легко оттуда забрать.
Забрать указатель можно, но как потом при его помощи спозицонироваться на IXMLDOMElement? Кроме перебора таки ничего в голову не приходит
Здравствуйте, Аноним, Вы писали:
А>Забрать указатель можно, но как потом при его помощи спозицонироваться на IXMLDOMElement? Кроме перебора таки ничего в голову не приходит
Что значит "спозицонироваться"? Как получить доступ к IXMLDOMElement по указателю на него?
Например:
LRESULT OnEndLabelEdit(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/)
{
LPNMTVDISPINFO pInfo = LPNMTVDISPINFO(pnmh);
if(pInfo->item.pszText)
{
SetItemText(pInfo->item.hItem,pInfo->item.pszText);
_variant_t vtName(pInfo->item.pszText);
((IXMLDOMElement*)pInfo->item.lParam)->setAttribute(L"name",vtName);
SortChildren(GetParentItem(pInfo->item.hItem));
}
return 0;
}