使用Formulas ,在你希望的地方放上Formulas ,方法是选择插入菜单下的Formulas选项,插入一个个的Formulas,就像grid的一个个cell
 
 vb代码向fomula传递参数:
      .ReportFileName = gsReportPath + "xsd.rpt"      .Formulas(0) = "customer='" & Trim(ofrm.txt(1)) & "(" & Trim(ofrm.txt(0)) & ")'" '客户名称和编码
      .Formulas(1) = "datetime='" & ofrm.msDatetime & "'"              '审核日期时间
      .Formulas(2) = "wrsname1='" & Trim(oFlg.TextMatrix(1, 0)) & "'"  '发票第一行的物资名称
      .Formulas(3) = "wrsname2='" & Trim(oFlg.TextMatrix(2, 0)) & "'"  '发票第二行的物资名称
      .Formulas(4) = "wrsname3='" & Trim(oFlg.TextMatrix(3, 0)) & "'"  '发票第三行的物资名称
      .Formulas(5) = "wrsname4='" & Trim(oFlg.TextMatrix(4, 0)) & "'"  '发票第四行的物资名称
      .Formulas(6) = "wrsname5='" & Trim(oFlg.TextMatrix(5, 0)) & "'"  '发票第五行的物资名称
customer,wrsname1,wrsname2等是formulas的名字。

解决方案 »

  1.   

    非常感謝 mornwoo(疾风之虫) 的回答﹐我馬上試一試﹐再給你答復﹐謝謝﹗
      

  2.   

    報表不能用和程序綁定在一起的那種嗎﹐一定要分開嗎﹐為什么照你上面寫的做了去得不到結果﹐請告訴我.Formulas(2)是report的屬性嗎﹐但是為什么只有一個crINC.FormulaFields.Item(1).Text﹐我按照help文件上的做了﹐程序沒有錯﹐但是看不到我想得到的東東﹐請高手解決﹐謝謝
      

  3.   

    你有n个formulas ,report就自动会形成formulas(n-1) 
     formulas是report的属性,上面的代码摘自我去年做的工程中,
     应用程序至今在使用中,没问题的!!!!
     调用时,依照上面的代码把值一个个传递过去。
     注意不是.formulafields,
     要不你把代码贴出来,我看看!!!
      

  4.   

    你有n个formulas ,report就自动会形成formulas(n-1) 
     formulas是report的属性,上面的代码摘自我去年做的工程中,
     应用程序至今在使用中,没问题的!!!!
     调用时,依照上面的代码把值一个个传递过去。
     注意不是.formulafields,
     要不你把代码贴出来,我看看!!!
      

  5.   

    首先﹐我用的crystal report 8.5﹐然后我用crystal report自動加入的窗口(frmINCRPT.frm和crINC.dsr)里面寫的代碼
    frmINCRPT.frm窗口的代碼如下﹕
    Option Explicit
    Dim Report As New crINC
    Dim tmpSum As StringPrivate Sub Form_Load()
    Screen.MousePointer = vbHourglass
    CRViewer1.ReportSource = Report
    CRViewer1.ViewReport
    Screen.MousePointer = vbDefaultEnd Sub
    crINC.dsr窗口的代碼如下﹕
    Option ExplicitPrivate Sub Section4_Format(ByVal pFormattingInfo As Object)
        crINC.FormulaFields.Item(1).Text = ChMoney(Val(Me.Field13.Value))
    End Sub
    請問我該把 ChMoney(Val(Me.Field13.Value))添加在哪個部份﹐怎么加﹖
    如果你輔導我做出來后我給你再加40分﹐謝謝﹗
      

  6.   

    这样好了,你先划一张报表,文件名temp.rpt
      在上面添加一个叫aa的formula
     然后在做新窗口,加一个报表控件(rpt),再加一个打印按钮,
     按钮click事件写下如下代码:
     dim sstr as string 
    sstr="test"
      with me.rpt
         .DataFiles(0) =  "c:\temp.mdb" 'temp.mdb是必须的,里面一个表没有
       表都没关系,必须有一个数据库,名字也可任意!!!
        .ReportFileName = gsReportPath + "xsd.rpt"
        .Formulas(0) = "aa='" & sstr & "'"   'sstr你谁遍赋值把
        .Destination = crptToWindow  '输出到屏幕
        .printreport 
    with   
     
     执行窗口,点打印按钮看有什么结果!!!!
      

  7.   

    抱歉这里错了:
      .ReportFileName = gsReportPath + "xsd.rpt"
       应换成temp.rpt的路径
      

  8.   

    回 yanweiguo(yanweiguo) 你到ftp://ftp.chinatnk.com
    上去找一下
      

  9.   

    請問  mornwoo(疾风之虫)  你能用msn嗎﹖加入我的MSN﹕[email protected]
    我寫了你給我代碼后﹐發現不能彈出預覽的窗口﹐看不了數據呀﹐我現在正等著米下鍋呀﹐可著急了呀
      

  10.   

    我覺得這個東西還是需要在Recordset下功夫 ..而DataBase 的Field的屬性要設為AllowNull為True, 否則我那段代碼還是不行
    大致為,
        Dim fld as String
        Dim rptApp As CRAXDRT.Application                 '報表物件
        Dim m_Rpt As CRAXDRT.Report                       '報表    rs.moveFirst
        If rs.recordCout<10 then 
           For i=rs.recordcount to 10
              rs.AddNew
              for Each fld as rs.fields.name
                 rs.field.Item(fld).value=null
               next        Next 
         End if
        '建立報表應用物件
        Set rptApp = CreateObject("CrystalRuntime.Application")
        '打開報表文件
        Set m_Rpt = rptApp.OpenReport(strFileName)
        m_Rpt.Database.SetDataSource rsRpt, 3, 1
            m_Rpt.ReadRecords
        me.CRViewer1.ReportSource = m_Rpt
        me.CRViewer1.ViewReport
      

  11.   

    上面那段有點小Bug..
    for Each fld as rs.fields.name-->For Each fld In rs.Fields.Count
    當然這只是小于10筆記錄..
    如果有多頁,只要先算到每頁有幾行..
    再求余出來,也就一樣..
      

  12.   

    最終的代碼為    Dim idx as Integer
        Dim rptApp As CRAXDRT.Application                 '報表物件
        Dim m_Rpt As CRAXDRT.Report                       '報表    rs.moveFirst
        If rs.recordCout<10 then 
           For i=rs.RecordCount to 10
              rs.AddNew
              For idx =0 to  rs.fields.Count-1
                 rs.field(idx).value=null
               next        Next 
         End if
        '建立報表應用物件
        Set rptApp = CreateObject("CrystalRuntime.Application")
        '打開報表文件
        Set m_Rpt = rptApp.OpenReport(strFileName)
        m_Rpt.Database.SetDataSource rsRpt, 3, 1
            m_Rpt.ReadRecords
        me.CRViewer1.ReportSource = m_Rpt
        me.CRViewer1.ViewReport
      

  13.   

    非常非常感謝  jxxiaojian(wnb) 。我馬上按你的思路做一下﹐看情況有沒有轉機呀﹐謝謝﹗現在我准備把該題的分值提升到50分﹐如果大家還有好的算法﹐歡迎提出來﹐希望能上下個月《程序員》的精華區﹐呵呵﹗
      

  14.   

    回 jxxiaojian(wnb) 不行呀
    Dim rptApp As CRAXDRT.Application                 '報表物件
    這句話我就執行不下去了﹐我用的是crystal report 8.5的版本﹐vb6.0+pack5﹐不知道行不行呀
      

  15.   

    你用的是Crystal Report自带的设计器还是vb设计器?
      

  16.   

    要是用Crystal Report自带的设计器這樣是行不通的
    哪位有更好的方法
      

  17.   

    我的一位朋友告訴我﹐把crystal report做成一個rpt檔案﹐然后再用VB調用﹐這樣子會快一些﹐所以我打算這樣做呢。高手指點﹐謝謝﹗
      

  18.   

    用Crystal Report自带的设计器
    聽說可以在Crystal Report裡增加Formula實現控制Details記錄項的顯示
    不知哪位大俠知道代碼?
    關注中。。
      

  19.   

    我有一個想法:
    在Details增加一個記數具(用來記靈Details的一字段顯示了多少個)
    然後用一個判斷:如果是同一頁的,且記數具為11(想控制1頁10個記錄)
    (上面的判斷我可以做到)
    調到下一頁顯示(關健在這裡,如何調到下一頁)
      

  20.   

    回 apexmfg(希望擦出火花) 關鍵是現在我連Formula都找不出來呀﹐555~~~~
      

  21.   

    Crystal Report自带的设计器
    連Formula都找不出來?
    不會怕
    直接按菜單下的Insert-->Field Object-->Formula Fields就可編Formula了
    現在我已做到控制第一頁顯示固定的記錄,但要填上空行還要努力啊!
      

  22.   

    不錯,要它畫出
     --------------------
    |A   B   C          | 
    |-------------------|
    |1   2   3          |
    |-------------------|
    |-------------------|維啊!我再試試!