电竞比分网-中国电竞赛事及体育赛事平台

分享

VFP表格的刷新問(wèn)題

 昵稱21123 2007-03-03

為什么在每次刷新表格的時(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  
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多