#pragma once #include #include #include #include #include #include #include "frame.vframe.vbusiness.hpp" #include #include "../vutil/publiccode.vutil.vbusiness.hpp" #include "listwin.vframe.vbusiness.hpp" class listtree : public listwin { string m_sType; //type string m_sTypeTxt; //Ñ¡ÖÐÊ÷µÄdata xtreeview tv_1; xcombobox ddlb_1; int changeddlb; int createSubTree(xtreeview* tv_folder, HTREEITEM h, KXMLDOMElement ele) { KXMLDOMNodeList nlist = ele.selectNodes(L"item"); int i; int s = nlist.length(); if (s > 0) { for (i = 0; i < s; i++) { KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i)); string name = e->selectSingleNode(L"Name").text(); HTREEITEM hw = tv_folder->InsertChildItem(h, name, (LPARAM)e, 15); createSubTree(tv_folder, hw, e); } } return 1; } int OnCreateTree(string sType) { while (tv_1.GetRootItem() > 0) tv_1.DeleteItem(tv_1.GetRootItem()); KXMLDOMDocument x; xaserverarg arg; arg.AddArg(L"sType", sType); xstring dataUrl = L"pref/listtree"; KXMLDOMElement xframeElement = GetElement(); KXMLDOMNode agent = xframeElement.selectSingleNode(L"//xtree[@name='tv_1']"); if (agent) { if (agent.selectSingleNode(L"@dataurl")) dataUrl = agent.selectSingleNode(L"@dataurl").text(); } if (xurl::get(GetServerUrl(),(xstring)GetEntityName(1) + L"/" + dataUrl, arg.GetString(), x) != 1) { //trace(x.GetXmlDoc().text); return -1; } else { KXMLDOMNodeList nlist = x.selectNodes(L"root/item"); int len = nlist.length(); if (len > 0) { int i; for (i = 0; i < len; i++) { KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i)); string name = e->selectSingleNode(L"Name").text(); HTREEITEM h = tv_1.InsertChildItem(0, name, (LPARAM)e, 17); createSubTree(&tv_1, h, e); if (len == 1) tv_1.ExpandItem(h); } tv_1.ExpandItem(0); } } return 1; } //Ê÷Ñ¡Ôñ int OnTreeSelChanged(TEvent* evt, LPARAM p) { if (changeddlb == 0) { HTREEITEM h = tv_1.GetSelectedItem(); KXMLDOMElement* e = (KXMLDOMElement * )tv_1.GetItemData(h); HTREEITEM root =tv_1.GetRootItem(); if (h == root) { m_sType = L""; m_sTypeTxt = L""; } else { string t = e->selectSingleNode(L"Type").text(); m_sType = t ; string txt = e->selectSingleNode(L"Code").text(); if (txt == L"") txt = e->selectSingleNode(L"Name").text(); m_sTypeTxt = txt; } m_pageIndex = 1; OnRetrieve(); //trace(m_sTypeTxt); } return 1; } //xcomboboxÏÂÀ­ int OnSelectDdlb(TEvent* evt, LPARAM p) { changeddlb = 1; HWND wid = ddlb_1.GetHWND(); int CB_GETCURSEL = 0x0147; int nIndex = SendMessageW(wid, CB_GETCURSEL, 0, 0); KXMLDOMElement e = ddlb_1.GetElement();//GetitemData(wid,nIndex);//ddlb_1.GetElement(); KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]"); string text = e2.selectSingleNode(L"@element").text(); OnCreateTree(text); changeddlb = 0; return 1; } int onloadtree() { tv_1 = GetControl(L"tv_1"); ddlb_1 = GetControl(L"cbx_1"); //dw_detail = this.GetControl("dw_detail"); AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&listtree::OnTreeSelChanged); AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&listtree::OnSelectDdlb); m_sType = L""; //type m_sTypeTxt = L""; //Ñ¡ÖÐÊ÷µÄdata changeddlb = 0; KXMLDOMElement xframeElement = GetElement(); KXMLDOMNode agent = xframeElement.selectSingleNode(L"//xcombobox[@name='cbx_1' and @visible ='layer']"); if (agent) { string s = agent.xml(); string sType = agent.selectSingleNode(L"@element").text(); OnCreateTree(sType); } else OnCreateTree(L""); return 1; } int onload() { listwin::onload(); onloadtree(); return 1; } };