创建动态数据窗口的两种方法

        创建数据有多种方法,比如用SELECT语句创建,这里最简单,还有用自定义字创建数据窗口,这个比较复杂,

下面就这两种方法介绍一下:

1、用SELECT创建数据窗口

     string ls_sql = 'select * from mara'
     string error_syntaxfromSQL, error_create

     string new_syntax

     new_syntax = SQLCA.SyntaxFromSQL(ls_sql, 'Style(Type=grid)', error_syntaxfromSQL)
  
     IF Len(error_syntaxfromSQL) > 0 THEN
         // Display errors
         messagebox('创建失败[1]!!!','错误创建语句:'+error_syntaxfromSQL)
         return
    ELSE
         // Generate new DataWindow
         dw_1.Create(new_syntax, error_create)
         IF Len(error_create) > 0 THEN
             messagebox('创建失败[2]!!!','创建数据窗口出错:'+ error_create)
             return
         END IF

    END IF

    string ls_request, ls_report
    ls_report = dw_1.Describe("Datawindow.Objects") +"~t"
    long Ll_Pos,ll_start
    string ls_objstr,ls_obj
    string ls_colname[]
    long ll_count
    Ll_Pos =  Pos(Ls_ObjStr, "~t", Ll_Start)

 

    //设置数据窗口更新字段
    long Ll_Pos,ll_start =1
    string ls_objstr,ls_obj
    string ls_colname[]
    long ll_count
    Ls_ObjStr = DW_1.Describe("Datawindow.Objects") + "~t"
    Ll_Pos =  Pos(Ls_ObjStr, "~t", Ll_Start)

    Do While Ll_Pos > 0
         Ls_Obj = Mid(Ls_ObjStr, Ll_Start, Ll_Pos - Ll_Start)
         If (DW_1.Describe(Ls_Obj + ".type") = 'column' ) And (DW_1.Describe(Ls_Obj + ".band") = 'detail') And & 
            (DW_1.Describe(Ls_Obj + ".visible") = "1" ) Then
            ll_count ++
            ls_colname[ll_count] = Trim(Ls_Obj)
         End if
         Ll_Start = Ll_Pos + 1
         Ll_Pos =  Pos(Ls_ObjStr, "~t", Ll_Start)
    loop

    for ll_count =1 to upperbound(ls_colname)
         DW_1.MODIFY('update=yes updatewhereclause=yes key=yes name='+ls_colname[ll_count]+' dbname="'+ls_colname[ll_count]+'"')
    next

    DW_1.MODIFY('updatewhere=1 updatekeyinplace=no')

    DW_1.SetTransObject(SQLCA)

2、用自定义字段创建数据窗口

     //定义全局变量

     string is_colname[] = {'col1','col2','col3'}                           //所有字段名
     string is_headtxt[] = {'参数1','参数2','参数3'}                     //所有字段对应的头文本
     string is_colsize[] = {'char(20)','number','decimal(0)'}      //所有字段对应的类型
     string is_font_face = '幼圆'                                                //显示的字体
     boolean ib_edit = TRUE                                                     //列是否可编辑

     //实现代码

     string ls_sql,ls_error,ls_tempsize
     long   ll_i
     long   ll_x,ll_width,ll_tabseq

     //说明版本及数据窗口的属性
     ls_sql = 'release 9;~r~n'+&
                +'datawindow ( units=0 timer_interval=0 color=1073741824 processing=1 print.printername="" '+&
                +'print.documentname=""  print.orientation=0 print.margin.left=110 print.margin.right=110 '+&
                +'print.margin.top=96 print.margin.bottom=96 print.paper.size=0 print.paper.source=0 '+&
                +'print.canusedefaultprinter=yes grid.lines=0 selected.mouse=yes)'

     ls_sql = ls_sql + + '~r~n' + &
                +'header(height=92 color="536870912" )'+&
                +'summary(height=0 color="536870912" )'+&
                +'footer(height=0 color="536870912" )'+&
                +'detail(height=100 color="536870912" )'

     //声明数据窗口的所有字段
     ls_sql = ls_sql + '~r~ntable('
     for ll_i = 1 to upperbound(is_colname) step 1
          ls_sql = ls_sql +'column=(type='+string(is_colsize[ll_i])+' updatewhereclause=yes name='+is_colname[ll_i]+' dbname="'+is_colname[ll_i]+'"  )~r~n'
     next
     ls_sql = ls_sql + ')~r~n'

     //设置所有列的抬头
     ll_width = 0
     ll_X     = 9
     for ll_i = 1 to upperbound(is_colname) step 1
          ll_x  = ll_x + 9 +ll_width
   
          if lower(left(is_colsize[ll_i],4)) = 'char' then
             ls_tempsize = mid(is_colsize[ll_i],pos(is_colsize[ll_i],'(')+1)
             ll_width = long(mid(ls_tempsize,1,pos(ls_tempsize,')')-1))
         else
             ll_width = 10
         end if
         ll_width = ll_width * 32
         ls_sql = ls_sql + &
                    +'text(name='+is_colname[ll_i]+'_t visible="1" band=header font.charset="0" '+&
                    +'font.face="'+is_font_face+'" font.family="2" font.height="-12" font.pitch="2" '+&
                    +'font.weight="400" background.mode="1" background.color="536870912" color="33554432" '+&
                    +'alignment="2" border="0" x="'+string(ll_x)+'" y="8" height="76"'+&
                    +'width="'+string(ll_width)+'" text="'+is_headtxt[ll_i]+'" )~r~n'

     next
     ls_sql = ls_sql +'~r~n'

     //设置所有列的属性
     ll_width = 0
     ll_x     = 9
     for ll_i = 1 to upperbound(is_colname) step 1
          ll_x  = ll_x + 9 +ll_width
          if lower(left(is_colsize[ll_i],4)) = 'char' then
             ls_tempsize = mid(is_colsize[ll_i],pos(is_colsize[ll_i],'(')+1)
             ll_width = long(mid(ls_tempsize,1,pos(ls_tempsize,')')-1))
         else
             ll_width = 10
         end if
         ll_width = ll_width * 32
  
         if ib_edit then  //设置可编辑
            ll_tabseq = ll_i * 10
        end if
  
        ls_sql = ls_sql + &
                   +'column(name='+is_colname[ll_i]+' visible="1" band=detail id='+string(ll_i)+&
                   +' x="'+string( ll_x)+'" '+&  
                   +'y="8" height="88"'+&
                   +'width="'+string(ll_width)+'" color="33554432" border="0" alignment="0" format="[general]" '+&
                   +'edit.focusrectangle=no edit.autohscroll=yes edit.autoselect=yes edit.autovscroll=no edit.case=any edit.codetable=no '+&
                   +'edit.displayonly=no edit.hscrollbar=no edit.imemode=0 edit.limit=0 edit.password=no edit.vscrollbar=no edit.validatecode=no '+&
                   +'edit.nilisnull=no edit.required=no criteria.required=no criteria.override_edit=no crosstab.repeat=no background.mode="1" '+&
                   +'background.color="536870912" font.charset="0" font.face="'+is_font_face+'" font.family="2" font.height="-12" font.pitch="2" '+&
                   +'font.weight="400" tabsequence='+string(ll_tabseq)+' )~r~n'
    next
    ls_sql = ls_sql +'~r~n'

    ls_sql = ls_sql +&
               +'htmltable(border="1" )~r~n'+&
               +'htmlgen(clientComputedFields="1" clientEvents="1" clientFormatting="0" clientScriptable="0" '+&
               +'clientValidation="1" generateJavaScript="1" netscapeLayers="0" netscapelayers="0" encodeSelfLinkArgs="1" )~r~n'+&
               +'export.xml(headGroups="1" includewhitespace="0" metadatatype=0 savemetadata=0 )~r~n'+&
               +'import.xml()~r~n'+&
               +'export.pdf(method=0 distill.customPostScript="0" xslfop.print="0" )~r~n'

    dw_1.Create(ls_sql,ls_error)    //创建数据窗口
    if ls_error <> '' and not isnull(ls_error) then
       messagebox('error',ls_error,stopsign!)  
    end if

    messagebox('','Success') 

猜你喜欢

转载自blog.csdn.net/tlammon/article/details/51176828