瀏覽次數: 627316

  • WEB項目能否在水晶報表點擊打印按鈕直接打印
    可以通過新增一個Button元件,然後在Click事件如下的寫法:
    CrystalDecisions.CrystalReports.Engine.ReportDocument rd = new CrystalDecisions. CrystalReports.Engine.ReportDocument();
    rd.Load(Server.MapPath("CRPOS.rpt"));
    rd.PrintOptions.PrinterName = "EPSON ME 1";
    try
    {
    rd.PrintToPrinter(1, true, 0, 0);
    }
    catch
    {
    Response.Write("");
    }
  • 在水晶報表中如何實現欄位代號去找關連表單的相對資料(如名稱等)?
    報表只能打印資料表的內容,無法自動去關聯其他table的內容,所以必須在原來的InfoCommand中,增加Left Join的語法,將對方所要列印的欄位加入即可列印。
  • 設計好的報表,為何發佈后執行時發生:The type initializer for 'CrystalDecisions. CrystalReports. Engine.ReportDocument' threw an exception.
    如果你要發布執行CrystailReport,而且這台IIS Server上有沒有安裝Visual Studio的情況下,必須要做2個步驟:
    1.請右鍵預設網站,選擇屬性,打開“默認網站屬性”視窗,在視窗裏選擇【主目錄】頁籤,把本地路徑C:\Inetpub\wwwroot記錄下來,然後在Server機的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ASP.NETClientFiles\路徑下找到CrystalReportWebFormViewer3資料夾,在Client端的C:\Inetpub\wwwroot路徑下新建\aspnet_client\System_Web\2_0_50727路徑,并把CrystalReportWebFormViewer3資料夾复制到C:\Inetpub\wwwroot\aspnet_client\System_Web\2_0_50727\路徑下。
    2.在C:\ProgramFiles\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\ CrystalReports\資料夾下找到CRRedist2005_x86.msi文件,用戶要把CrystalReport發布到哪台機器(沒有VS的),就將此文件複製到那台機器並安裝此文件。
  • 有一個報表是要印標籤的,由於標籤的位置是固定的,但要從哪一個標籤開始印是不一定的,(例:一張標籤紙有24張小標籤紙,但有時候要由第8張開始印,有時候要由第6張開始印),請問要如何動態去控制報表列印的位置?
    可以在資料中添加一些空記錄,比如從第6張開始印,就添加5筆。在資料中依據實際增加一定數量的記錄。比如我要從3開始印,就需要添加2筆記錄,一般只有key欄位是必須設定值的,keyfield的值可以使用你資料表確定沒有的值,其他欄位可以依據自己的情況。
    DataRow dr;
    for (...)
    {
    dr = idMaster.RealDataSet.Tables[0].NewRow();
    dr[keyfield] = ...
    idMaster.RealDataSet.Tables[0].Rows.InsertAt(dr,0);
    }
    以上程式寫在給報表賦DataSet前,比如MyReport.SetDataSource(Master.RealDataSet)這行程式前。
  • CrystalReport在發布後執行, 為何會出現一個資料庫登入的畫面?
    在執行Crystal Report報表時,如果沒有將對應的xml分發到 EEP2006\EEPNetReport之下的話, 就會出現此訊息。報表所對應的Xml檔,應該只用於設計模式中用來設計報表所使用,但在RunTime啟動時,Crystal Report雖然不會去到XML中去得取資料,資料是由你所控制的WebDataSource所提供,但實際上在Crystal Report啟動的那個瞬間,還是必須要有XML作為啟動報表的資料源,有2種方法可以避免這種現象,如下:
    1. 在設計畫面中,點擊ReportViewer的右上角,點擊“Clear Report Source”,這個方法的執行結果是在Form開啟的時候不會顯示資料,只有當查詢後才會顯示,所以可以避免此錯誤發生。
    2. 在Form_Load的事件中,增加程式來設定報表的資料源。這種方法的運行結果是在Form打開的一瞬間就可以看到報表,如下:
    MyReport11.SetDataSource(myInfoDataSet.RealDataSet);
    crystalReportViewer1.ReportSource = MyReport11;
  • Crystal Report如何ClientQuery的條件?
    如下Sample,可以用下列方法來達成:
    protected void Button1_Click1(object sender, EventArgs e) //印表程式
    {
    WebClientQuery1.Excute(Panel1, true); // 處理條件
    TextObject memo=(TextObject) CrystalReportSource1.ReportDocument.ReportDefinition.Sections["Section2"].ReportObjects["Text7"]; //取得Crystal Report Section2.Text7
    memo.Text = WebClientQuery1.GetText(); //設定Text7.Text
    CrystalReportViewer1.RefreshReport(); // 印表
    }
  • 如何在Crystal Report中顯示資料表中單價及數量欄位相乘後的總價?
    可供選擇方法:
    1. 最簡單的方法,就是sql語句直接取得,在報表中只要多顯示一個欄位就可以。
    2. 在報表的欄位資源管理器中增加“公式欄位”,再編輯相應的計算公式。
    3. 在報表的Detail中增加一個欄位,然後在這個TextObject元件中寫程式返回兩個欄位的乘積。
  • 報表的顯示,變為一個欄位各佔一行,且在報表上多了一些虛線的空白行?
    可能是由於網頁中使用了css造成的,請打開Form後,檢視檔的原始檔,將多餘的鏈接css的部分刪除,如圖:
  • 請問一下可以在報表FORM中以程式控制報表群組的欄位嗎?
    直接控制報表的群組不太容易實現,建議採用如下的方式,多定義一個欄位(可以在Select語句中用select ‘ ’ as field1),報表固定使用這個欄位做?群組欄位。在顯示報表前,可以將想要分組的欄位的內容用程式寫入到DataSet中的field1欄位,這樣報表也不需要特別的設計了。
  • 欄位名稱一樣,資料表不一樣的報表可以共用嗎?
    如果兩個資料來源的結構完全一樣,也可以用以下程式:
    DataSet ds = infoDataSet1.Execute("select ....");
    ds.Tables[0].TableName = "YouTableName";
    CrystalReport11.SetDataSource(ds);
    crystalReportViewer1.ReportSource = CrystalReport11;
    以上程式中,TableName的設定非常重要,因為報表的顯示是區別TableName的,所以應該設定成跟您的報表上的一樣。
  • 設計Client端Crystal Report,完成後重新建置,出現沒有型別的錯誤訊息?
    錯誤是因語句this.cTR01rs1 = new cTR01rs.cTR01rs();引起的。一般選擇一個報表後,產生的程式應該是:this.xxx = new dll.Report();其中dll是這個報表所在的工程build出的,Report是你報表的class名字。若是將此dll與Report設為同名,則會引發該錯誤,這是因為VS編輯器會把cTR01rs識別為Report的Class,而new關鍵字後面的那個cTR01rs應該為Namespace才對,這應該是VS2005的BUG。
  • 如何在報表列印前,對其進行排序?
    水晶報表本身有提供排序的功能,在報表設計畫面,右鍵選『Report』-『Record Sort Export』.在此可以設定需要排序的內容,以及排序的規則.
    在列印的程式中,加上using CrystalDecisions.CrystalReports.Engine;
    並在(crystalReportViewer1.ReportSource=CEE00RL1前面)增加如下程式:
    SortField stF = CEE00RL1.DataDefinition.SortFields[i];
    stF.Field = CEE00RL1.Database.Tables[0].Fields[FieldName];
    stF.SortDirection = CrystalDecisions.Shared.SortDirection.DescendingOrder
  • Crystal Report報表如何更換欄位的顯示名稱?
    1. 直接在報表中更改。
    2. 如果是動態的話就需要寫程式。
    (CrystalReport11.Section2.ReportObjects["Text2"] as TextObject).Text = "Your Value";
    CrystalReport11是ReportDocument元件的名字,其他的內容可以依據自己的實際情況做修改,也可以用以下方式:
    TextObject Text1 = rdc.ReportDefinition.ReportObjects["Text1"] as TextObject;
    if (Text1 != null) Text1.Text = "單位";
  • 請問要如何控制Crystal Report的匯出檔案格式及檔名?
    //CHIP_Style1為CHIP_Style.rpt
    CHIP_Style1.SetDataSource(Master.RealDataSet);
    setReportParameter(CHIP_Style1, REPORT_STYLE);

    //由ExportToDisk該方法產生
    //第一參數為產出格式,第二參數為產出之路徑檔名
    CHIP_Style1.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.WordForWindows, tOutFile.ToString());
  • 如何讓報表即時更新?
    1. 先讓Master更新,比如重新Active,或者SetWhere (Master為資料來源InfoDataset)
    2. 然後執行crystalReportViewer1.RefreshReport();
  • 如何將Stored Procedure的結果丟到Client端的InfoDataSet呢?
    這個可以通過一些變通的方法實現
    1. 在Server端放一個InfoCommand,sql語句設成跟您存儲過程返回回來的欄位一樣,例如:select 'abc' as f1, 0.0 as f2....from table where 1=0
    只是為了取得table的結構而已。
    2. 在Client端使用一個InfoDataSet,比如叫Master,就關聯到步驟1的InfoCommand。
    3. 按照Report正常設計。
    4. 在設定資料來源時,改成如下:
    if (ret[0].ToString() == "0")
    {
    //將返回的內容導入到Master中,這樣就可以用報表顯示出來
    Master.RealDataSet.Tables[0].Merge((DataTable)ret[1]);
    idgStat.DataSource = ret[1];//這個是用於顯示在Gridview上.
    //再加上下麵兩句,就將報表顯示出來了
    this.CrystalReport11.SetDataSource(Master.RealDataSet);
    crystalReportViewer1.ReportSource = CrystalReport11;
    }
    以上程式,請依據自己的環境適當修改。
  • 報表在運行出現資料庫登陸框?
    在運行報表時如果將對應的xml刪除會出現DataBase的登陸對話框,有2種方法可以避免這種現象,可按各自的需要選擇:
    1. 如設計檔所說,在設計畫面,點擊ReportViewer的右上角,點擊“Clear Report Source”,這種方法的運行結果是在Form開啟的時候不會顯示資料,只有當查詢後才會顯示。
    2. 在Form_Load的事件中,增加程式來設定報表的資料源,這種方法的運行結果是在Form打開的一瞬間就可以看到報表,增加的程式:
    MyReport11.SetDataSource(myInfoDataSet.RealDataSet);
    crystalReportViewer1.ReportSource = MyReport11;
  • 發佈後,USER點印表會將整個Client當掉,提示資訊:The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception
    請安裝CRRedist2005_x86.msi,該文件請至Visual Studio2005的安裝目錄下Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports查找。
  • 在Server端增加一欄位,並且將Client的DataSet重新Save to Report且xml檔中也已增加新的欄位,但報表的欄位如何更新?
    1. 右鍵選中DataBase Fields,選擇"LogOn or Off Server"。
    2. 選擇Create New connection\ADO.NET\NewDataSet。
    3. 點擊Log off按鈕,並關閉。
    4. 右鍵選中Database Fields,選擇“Verify DataBase” 。
  • 分發到IIS後,RUN Crystal Report發生下列訊息時:The report you requested requires further information.?
    這是因為RunTime時,你沒將EEP2006\EEPNetReport之下的XML也分發過去,可使用copy或FTP將這些XML文檔分發過去。
  • WEB項目能否在水晶報表點擊列印按鈕直接列印?
    可通過新增一個BUTTON控制項然後寫CODE解決
    CrystalDecisions.CrystalReports.Engine.ReportDocument rd = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
    rd.Load(Server.MapPath("CRPOS.rpt"));//CRPOS.rpt為所製作的rpt文件的全稱
    rd.PrintOptions.PrinterName = "EPSON ME 1";
    try
    {
    rd.PrintToPrinter(1, true, 0, 0);
    }
    catch
    {
    //提示
    Response.Write("");
    }
    以上設置可實現服務器端的直接列印,客戶端的直接列印通過JAVASTRIPT調用IE列印或自己做ActiveX實現。
  • 如何在水晶報表中顯示其他table的欄位,如將ProductId顯示為ProductName?
    報表只能列印資料庫的內容,不能自動去關聯其他table的內容,變通的方法如下:
    1. Form1的Master在Server端生成一個關聯欄位,left join進來這個欄位,然後就列印這個欄位,而不是原來的id欄位。
    2. 印表的資料與編輯的資料設定為不同來源,印表的資料來源left join這個欄位,同樣列印的時候選擇這個說明欄位:
    方法1是可以省略一個資料來源,缺點是在新增編輯的時候要同步處理這個欄位的值。
    方法2就需要多一個DataSet,且要在列印的時候去做SetWhere,選中目前這筆資料。
  • 報表中如何設置線條物件為垂直顯示?
    選中線條物件,在報表中鼠標左鍵按住垂直拖動即可出現垂直線條。
  • Client上有沒有安裝Visual Studio時,水晶報表發佈時的註意事項為何?
    必須要做2個步驟:
    1. 請右鍵預設網站,選擇屬性,打開“默認網站屬性”視窗,在視窗裏選擇主目錄選項,把本地路徑C:\Inetpub\wwwroot記錄下來,然後在Server機的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ASP.NETClientFiles\路徑下找到CrystalReportWebFormViewer3資料夾,在Client端的C:\Inetpub\wwwroot路徑下新建\aspnet_Client\System_Web\2_0_50727路徑,並把CrystalReportWebFormViewer3資料夾複製到C:\Inetpub\wwwroot\aspnet_Client\System_Web\2_0_50727\路徑下。
    2. 在C:\ProgramFiles\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports\資料夾下找到CRRedist2005_x86.msi文件,用戶要把CrystalReport發佈到哪台機器(沒有VS的),就將此文件複製到那台機器並安裝此文件。
  • Crystal Report 的各區段上下高度, 如何微調?
    1. 選中此Section(選中的section顏色會有變化)。
    2. 直接看屬性視窗。
    3. 如果還是找不到,那就點中report空白處(左鍵)然後檢視屬性視窗,從上面直接選要設定的Section也可以。
  • 如何實現CrystalReport的BARCODE?
    可以直接儲存於Windows\Fonts下,然後在控制臺的字形裡安裝新字形,選SMbarcode字形就是條碼了,條碼集請下載: http://www.infolight.com/download/QAFiles/SMbarcode.rar