TreeView控件不同层次节点的设计与运用一、设计界面:二、运行界面:三、有关代码1、Form1.Init事件代码Thisform.Gen Tree(1)2、Form1.Load事件代码PUBLICDataPath,TempPathDataPath=SYS(5)+S YS(2003)+"\Data\"IF!DIRECTORY(DataPath)MD(DataPath)ENDIFTempPa th=SYS(5)+SYS(2003)+"\Temp\"IF!DIRECTORY(TempPath)MD(TempPath) ENDIFCLOSEdataUSE(DataPath+"jsrkb20190101.dbf")ALIASjsrkb IN0USE(DataPath+"kb20190101.dbf")ALIASrkbIN0USE(D ataPath+"成绩汇总表.dbf")ALIAScjhzbIN0USE(DataPath+"干部信息汇总表. dbf")ALIASxxhzbIN0USE(DataPath+"jsxx.dbf")ALIASjsxx IN03、Form1.UnLoad事件代码CLOSEDATABASES4、Form1.Gentree事件代码(新建方法 程序:Gentree)PARAMETERSScfsDOCASEcaseScfs=1thisform.olecontr ol1.LINESTYLE=1THISform.olecontrol1.STYLE=7Thisform.OleControl1.N odes.ClearSELECTdistinct年级FROMcjhzbintoCURSORtempSCA N&&添加第一层节点:年级thisform.olecontrol1.Nodes.Add(,,''年级''+ALLTRIM(年级) ,年级)SELECTDISTINCT班级FROMcjhzbWHEREcjhzb.年级=TEMP.年级I NTOCURSORTEMP1SELECTtemp1SCAN&&添加第二层节点:班级thisform.OleCon trol1.Nodes.Add(''年级''+ALLTRIM(temp.年级),4,''班级''+ALLTRIM(temp.年级)+ALL TRIM(班级),班级)SELECTdistinct性别FROMcjhzbWHEREcjhzb.年级=Te mp.年级ANDcjhzb.班级=Temp1.班级INTOCURSORtemp2SELECTtemp2S CAN&&添加第三层节点:性别thisform.olecontrol1.Nodes.Add(''班级''+ALLTRIM(Te mp.年级)+ALLTRIM(temp1.班级),4,''性别''+ALLTRIM(Temp.年级)+ALLTRIM(temp1.班级 )+ALLTRIM(性别),性别)ENDSCANUSEINtemp2SELECTtemp1ENDSCANUSE INtemp1SELECTtempENDSCANUSEINtempthisform.olecontrol1.ref reshcaseScfs=2thisform.olecontrol1.LINESTYLE=1THISform.olecontro l1.STYLE=7Thisform.OleControl1.Nodes.ClearSELECTdistinctnj,n jdhFROMjsrkbintoCURSORtempORDERBYnjdhScan&&添加第一 层节点:年级thisform.olecontrol1.Nodes.Add(,,''nj''+ALLTRIM(nj),nj)SELECT DISTINCTbjFROMjsrkbWHEREjsrkb.nj=TEMP.njINTOCURSOR TEMP1SELECTTEMP1SCAN&&添加第二层节点:班级THISFORM.OLECONTROL1.Nodes .Add(''nj''+ALLTRIM(temp.nj),4,''bj''+ALLTRIM(temp.nj)+ALLTRIM(bj),bj )ENDSCANUSEINTEMP1SELECTTEMPENDSCANUSEINTEMPTHISFORM.OL ECONTROL1.REFRESHcaseScfs=3thisform.olecontrol1.LINESTYLE=1THISf orm.olecontrol1.STYLE=7Thisform.OleControl1.Nodes.ClearSELECTDI STINCT姓名FROMxxhzbINTOCURSORtempSCAN&&添加节点:姓名thisform .olecontrol1.nodes.add(,,''姓名''+ALLTRIM(姓名),姓名)ENDSCANTHISFORM.OLE CONTROL1.REFRESHENDCASE5、Olecontrol1.NodeClick事件代码ActiveX控件 事件LPARAMETERSnodeDOCASECASEthisform.optiongroup1.Value=1 wjm=DataPath+"cjtjmb.doc"PUBLICcnj,cbj,i,j,k,m,noWo rd=CREATEOBJECT("word.application")oWord.VISIBLE=.T.SELECTcjhzb LocateFORALLTRIM(cjhzb.年级)=ALLTRIM(Node.Parent.parent.text) ANDALLTRIM(cjhzb.班级)=ALLTRIM(Node.parent.text)ANDALLTRIM(cjh zb.性别)=ALLTRIM(Node.text)IFFOUND()cnj=ALLTRIM(Node.Parent.paren t.text)cbj=ALLTRIM(Node.parent.text)cxb=ALLTRIM(Node.text)WAIT WINDOW''正在生成"''+cnj+cbj+cxb+''"生的成绩统计表……''NOWAITSELECT FROMcjhzbWHERE年级=cnjAND班级=cbjAND性别=cxbINTO CURSORtemp3SELECTtemp3oTab=oWord.APPLICATION.Documents.OPEN (wjm)oWord.SELECTIONoWord.SELECTION.insertafter(ALLTRIM("&cnj&cbj &cxb"+"生"))SELECTtemp3FORi=1TORECCOUNT()GOiIFi>30 oTab.Tables(1).Cell(i+1-30,5).Range.InsertAfter(temp3.姓名)oTab.T ables(1).Cell(i+1-30,6).Range.InsertAfter(temp3.语文)oTab.Tables(1 ).Cell(i+1-30,7).Range.InsertAfter(temp3.数学)oTab.Tables(1).Cell( i+1-30,8).Range.InsertAfter(temp3.英语)ELSEoTab.Tables(1).Cell(i+ 1,1).Range.InsertAfter(temp3.姓名)oTab.Tables(1).Cell(i+1,2).Range .InsertAfter(temp3.语文)oTab.Tables(1).Cell(i+1,3).Range.InsertAft er(temp3.数学)oTab.Tables(1).Cell(i+1,4).Range.InsertAfter(temp3.英 语)ENDIFENDFORSELECTtemp3USESELECTcjhzbWAITCLEARFileName =TempPath+cnj+cbj+cxb+"生成绩统计表.doc"oWord.Documents(1).SAVEAS(Filen ame)oWord.ActiveDocument.CLOSEoWord.QUIT()MESSAGEBOX("成绩统计表WORD文档 生成完毕!",64,"提示")ENDIFthisform.RefreshCASEthisform.optiongroup1 .Value=2wjm=DataPath+"bjkbmb1.doc"PUBLICcnj,cbj,bzr,cxkmc, i,j,kWordApp=CREATEOBJECT("Word.application")WordApp.Visible= .t.SELECT0SELECTjsrkbLOCATEFORALLTRIM(jsrkb.NJ)==ALLTRIM(no de.parent.Text)ANDALLTRIM(jsrkb.BJ)==ALLTRIM(Node.text)IFFOUN D()cnj=ALLTRIM(Node.parent.Text)cbj=ALLTRIM(Node.text)bzr=ALLTRIM (jsrkb.班会)WAITWINDOW''正在生成"''+cnj+cbj+''"的日课表…''NOWAITSEL ECTfromkb20190101wherenj=cnjandbj=cbjintocursorbjkbSE LECTfromrkbwherenj=cnjandbj=cbjintocursorbjkb SELECTbjkbWordTable=WordApp.Application.Documents.Open(wjm)&&关 键wordapp.selectionwordapp.Selection.InsertAfter(ALLTRIM("&cnj&cbj "))&&在模板文件标题行插入年级、班级WORDAPP.ActiveDocument.Content.Find.Execute( ''ABCDEF'',.F.,.F.,.F.,.F.,.F.,.F.,.F.,.F.,''&bzr'',2)SELECTbjkbFOR i=1TO5FORj=1TO6cxkmc=ALLTRIM(EVALUATE("bjkb."+"zhou"+ TRANSFORM(i)+TRANSFORM(j)))WordTable.Tables.item(1).Cell(j2,i+2) .Range.Text=cxkmcSELECTjsrkbFORk=1toFCOUNT()IFFIELD(k)= cxkmcWordTable.Tables.item(1).Cell(j2+1,i+2).Range.Text=EVALUATE (FIELD(k))ENDIFENDFORENDFORendforSELECTbjkbUSESELECTjsrkbWAIT CLEARFileName=TempPath+cnj+cbj+"课程表.doc"WordApp.ActiveDocu ment.PrintOutWordApp.Documents(1).SaveAs(filename)&&自动保存文件WordA pp.ActiveDocument.Closewordapp.application.quitmessagebox("班级日课表的 WORD文档生成完毕!",64,"提示:")ENDIFthisform.refreshCASEthisform.optiong roup1.Value=3wjm=DataPath+"干部信息登记表.doc"SELECTxxhzbLOCATEFOR ALLTRIM(xxhzb.姓名)==ALLTRIM(Node.Text)IFFOUND()cxm=ALLTRIM(Node .Text)FileName=TempPath+cxm+"信息登记表.doc"oword=CREATEOBJECT("word. application")oDoc=oWord.Documents.open(wjm)oTable=oWord.ActiveDoc ument.Tables(1)SELECTjsxxSCANcRow=VAL(GETWORDNUM(jsxx.位置,1,'','') )cCol=VAL(GETWORDNUM(jsxx.位置,2,'',''))cvalue=jsxx.字段内容zd=xxhzb.&cva lueoTable.cell(cRow,cCol).range.Insertafter(IIF(jsxx.类型=''D'',DTOC(zd),zd))ENDSCANoWord.ActiveDocument.SaveAs(FileName)oDoc.closeRELEASEoWordENDIFWAITclearthisform.RefreshENDCASE6、Optiongroup1.Click事件代码Thisform.GenTree(This.Value)7、Optiongroup1.Option1.Caption:成绩汇总表8、Optiongroup1.Option2.Caption:班级课程表9、Optiongroup1.Option3.Caption:干部信息表四、说明:1、在当前目录下新建文件夹Data,用于存放表文件和模板文件。2、在当前目录下新建文件夹Temp,用于存放程序生成的临时文件。 |
|