|
為什么在每次刷新表格的時(shí)候,表格的格式總會(huì)自已改變?? (我已經(jīng)在屬性中把全部的格式都設(shè)為固定的了)
我是用SQL語(yǔ)句 比如說(shuō)我想找值在1和3之間的所有數(shù)據(jù),讓它在表格中顯示,(此時(shí)出現(xiàn)的格式和設(shè)計(jì)是一樣)) 可是當(dāng)我再次查找值為5和8之間的數(shù)據(jù)時(shí),在表格顯示的格式就不一樣, 顯示出來(lái)的格子都比原來(lái)的小,好象都是和字段長(zhǎng)度相同? 有什么辦法可以解決呢???? 或者要用視圖??Top
兩個(gè)解決方法: 1、用create cursor創(chuàng)建一個(gè)同構(gòu)cursor,將此cursor與grid綁定, 以后用zap,append from命令將sql結(jié)果集追加到該cursor. 2、寫一個(gè)form方法以編程方式實(shí)現(xiàn)sql語(yǔ)句的結(jié)果與grid的綁定, 每次執(zhí)行sql后調(diào)用該方法。 推薦使用方式1。(不知7.0是否解決了這個(gè)問(wèn)題,它的sql語(yǔ)句產(chǎn)生的cursor可以定義為可讀寫的) VF7.0的SELECT命令可以生成可更新的臨時(shí)表 Top
我采用的方法是: 把表格的數(shù)據(jù)源設(shè)為sql語(yǔ)句,然后在表格的refresh事件中 this.recordsource=‘select ***** into cursor custs‘ 表格的各項(xiàng)的長(zhǎng)度不會(huì)有很大的變化。 Top
假如你選擇的列是每次一樣的。那么你可以添加固定列的grid,并且你也可以設(shè)置字體,寬度等。 代碼:thisform.grid1.recordsource=""&&在重新生成數(shù)據(jù)源前,要先關(guān)閉表格的數(shù)據(jù)源 select * from table into cursor custs thisform.grid1.recordsource="select * from custs into custs" 如果選擇的列是不一定的。 thisform.grid.recordsource="" thisform.grid1.columncount=-1 select * from table into cursor custs thisform.grid1.recordsource="select * from custs into custs" this.refreshTop
方法2:在form上定義一個(gè)method:gridbinding, 仿照下列代碼定義對(duì)grid的綁定,按你的方式, 每次數(shù)據(jù)源變化之后就調(diào)用這個(gè)方法。 (編程編程,不編怎么成!) ------------------------------------------------------------- with THISFORM.grid1 .RecordSource = "kmlist" .COLUMNCOUNT = 7 .column1.header1.CAPTION = ‘科目代碼‘ .column2.header1.CAPTION = ‘科目名稱‘ .column3.header1.CAPTION = ‘幣種‘ .column4.header1.CAPTION = ‘標(biāo)識(shí)‘ .column5.header1.CAPTION = ‘總分類帳‘ .column6.header1.CAPTION = ‘日記帳‘ .column7.header1.CAPTION = ‘建帳年份‘ .column1.Controlsource = "kmdm" .column2.Controlsource = "km_chi_mc" .column3.Controlsource = "wbdm" .column4.Controlsource = "iif(km_bs=2,‘明細(xì)‘,‘匯總‘)" .column5.Controlsource = "iif(zz_bs,‘是‘,‘ ‘)" .column6.Controlsource = "iif(rjz_bs,‘是‘,‘ ‘)" .column7.Controlsource = "curyear" .column1.WIDTH = 100 .column2.WIDTH = 120 .column3.WIDTH = 60 .column4.WIDTH = 40 .column5.WIDTH = 100 .column6.WIDTH = 100 .column7.WIDTH = 100 .setall("format","ZKT","column") .gridlinecolor=rgb(64,128,128) .setall("FONTSIZE",9,"header") .setall("alignment",2,"header") .readonly=.t. endwith thisform.refresh
首先確定一下,出現(xiàn)這個(gè)問(wèn)題的原因是Grid的數(shù)據(jù)源"丟失"了,等你再重新設(shè)置的時(shí)候,Grid認(rèn)為換了一個(gè)新的數(shù)據(jù)源,所以一切都重來(lái)了,你的Grid的表格自然變了。這個(gè)也不能算是vfp的BUG。 net_steven(吃素的狼) 的辦法麻煩了一點(diǎn),不過(guò)確實(shí)是保證不出問(wèn)題。我的辦法是在你刷新數(shù)據(jù)之前,先把Grid的數(shù)據(jù)源置空(Grid.RecordSorce=""),新的數(shù)據(jù)取來(lái)后,重新設(shè)置Grid.RecordSource和Column.ControlSource,然后刷新一下就行了(我一般把這一段程序作一個(gè)專用的方法——From.GirdReset())。Top
先設(shè)置好表格的數(shù)據(jù)源,以及列的寬度,字體等,recordsourcetype=別名,recordsource="lsb" lsb先假設(shè)是該表格要顯示的數(shù)據(jù)源 表單load時(shí),確保該數(shù)據(jù)源已生成。 點(diǎn)查詢 thisform.grid1.recordsource=‘‘ select rsda.bh,xm,xb from table where aa>1 into cursor lsb thisform.grid1.recordsource="lsb" 注意,你表格比如要顯示bh,xm兩列,但數(shù)據(jù)源中必須要有sno,bh,xm三列,則你必須寫成bh,xm,sno,而不能寫成sno,bh,xm,把顯示不用的列寫后面。Top
我也有一段代碼、貼出來(lái)湊個(gè)數(shù)。(放在refresh前) clmnwdth=90 FOR nCnt = 1 to THISFORM.grid1.ColumnCount do case case nCnt = 1 this.Columns(nCnt).width = clmnwdth otherwise this.Columns(nCnt).width = clmnwdth/3*4 endcase ENDFOR
|