Форум » FiveWin » Tree в XBrowse » Ответить

Tree в XBrowse

ZAlex: Начинаю новый проект, а в нем хочу данные представлять в виде дерева -- очень удобно, наглядно для пользователя. Дерево строится, показываю его в XBrowse. Но есть проблемма, не знаю как подойти к ее решению @ 4 , 0 XBROWSE oBrw Size oMainWindow:oMsgBar:nWidth, -oMainWindow:oMsgBar:nHeight Of oMainWindow DATASOURCE oTree ; HEADERS "Наименование " ; PICTURES nil ; ON DBLCLICK RowEdit( oBrw:CurrentRow() ); CELL LINES FOOTERS FASTEDIT NOBORDER FONT oFontBrw в XBROWSE показываю oTree, дерево отображается нормально, раскрывается и т.д. в функции RowEdit - корректирую текущую запись, или в зависимости от флага добавляю запись WITH OBJECT oBrw :lVThumbTrack := .t. :nStretchCol := 1 :lDisplayZeros := .f. :bChange := { || AAll->( DBGOTO( oBrw:oTreeItem:Cargo[ 1 ] ) )} :bEdit := { |oRec| RowEdit(oRec) } oBrw:l2007 := .T. oBrw:lFlatStyle := .F. :CreateFromCode() :bKeyChar := { |nKey| If( nKey == 13, Eval(oBrw:bLDblClick), nil ) } oBrw:bLDblClick = { || MSGINFO("Нажали мышь"),If( oBrw:oTreeItem:nLevel == 1, Nil, (MsgInfo(oBrw:oTreeItem:nLevel), RowEdit(oBrw:CurrentRow()), oBrw:Refresh()) ) } END Eval( oBrw:bChange ) oBrw:Refresh() oMainWindow:oClient := oBrw записи корректируютя, добавляются в базы DBF, но как их отобразить, показать измененные в XBROWSE. т.е. необходимо изменять данные в oTree. Не нашел никаких методов для перерисовки TREE. Неужели нужно по новому перезачитывать в oTree данные из баз данных. Примеров по этому не нашел. Может есть какие-то решения? Подскажите. Harbour 3.2.0dev (r1412151448) + FWH14.12 + BCC582

Ответов - 3

fil: Можно в postedit обновление бровса делать

ZAlex: В XBrowse добавляю нужные колонки и пытаюсь вставить bOnPostEdit : WITH OBJECT :AddCol() :cHeader := "адрес установки" + CRLF +"(улица дом)" :nHeadStrAlign := AL_CENTER :bEditValue := { || If( oBrw:oTreeItem:nLevel == 1, 0, oBrw:oTreeItem:Cargo[ 5 ] ) } :bOnPostEdit = { | oCol, xVal, nKey | AAll->cAdres := xVal, oBrw:Refresh() } // вставил для перерисовки :nDataStrAlign := AL_LEFT :nWidth := 150 END ничего не изменилось дерево строю таким образом: // --------------------------------------------------------- TREE oTree oTree:Cargo := { 0, Space(40), 0, 0, Space(25), Space(25) } do while ! AAll->( eof() ) TREEITEM oID_KOD PROMPT ATerm->CNAIM CARGO { 0, Space(40), 0, 0, Space(25), Space(25) } TREE do while ATerm->CNAIM == oID_KOD:cPrompt .and. ! AAll->( eof() ) TREEITEM oCNAIM PROMPT AAll->CNAIM CARGO { AAll->( RECNO()), AAll->CNAIM, AAll->nSOU, AAll->nMerch, AAll->cAdres, AAll->cMesto } AAll->( DbSkip( 1 ) ) enddo ENDTREE enddo ENDTREE потом в XBrowse подключаю нужный столбец и показываю данные :bEditValue := { || If( oBrw:oTreeItem:nLevel == 1, 0, oBrw:oTreeItem:Cargo[ 5 ] ) } т.е. необходимо изменять соответствующие Cargo Как-то необходимо связать между собой XBrowse и TREE, или получать соответствующие индексы элементов oTREE и там все перезаписывать. А если необходимо добавить запись, т.е. мне нужно будеть отслеживать структуру oTREE и следить за этим? Странно, что нет никаких методов в объекте XBrowse, чтобы нормально работать с TREE/

fil: Попробовать рефрешить oTree-обект в postedit Посмотреть у Линареса, там много на эту тему




полная версия страницы