2012-11-26 43 views
1

我試圖在C#2010中使用CRAXDDRT通過水晶子報告進行循環,並且遇到了問題。我發現了很多的VB6代碼,看起來像這樣...使用craxdrt循環使用水晶子報告

Dim crxDatabaseTables As CRAXDRT.DatabaseTables 
Dim crxDatabaseTable As CRAXDRT.DatabaseTable 
Dim crxSections As CRAXDRT.Sections 
Dim crxSection As CRAXDRT.Section 
Dim CRXReportObject As Object 

For Each crxSection In crxSections 
    For Each CRXReportObject In crxSection.ReportObjects 
     If CRXReportObject.Kind = crSubreportObject Then 
      ' loop code here 
     End If 
    Next 
Next 

雖然這看起來&在VB6這不會在C#中工作,因爲CRXReportObject是對象的偉大工程,使這條線...

If CRXReportObject.Kind = crSubreportObject Then 

...將不起作用'Kind'不是對象上的方法。有沒有人有任何建議來解決這個問題? 在有人建議不使用Crystal Report ActiveX對象之前,我們不能。我們堅持了下來... 這是到目前爲止的代碼...

foreach (CRAXDDRT.Section section in crystalReport.Sections) 
{ 
    foreach (object item in section.ReportObjects) 
    { 
     //If item.Kind = crSubreportObject Then 
      //loop code here 
     //} 
    } 
} 

回答

1

可能我只想說,這個解決方案是不理想的,但如果我不能找到一個更好的解決方案,這是什麼我要去跟...

CRAXDDRT.SubreportObject subReport = null; 

foreach (CRAXDDRT.Section section in crystalReport.Sections) 
{ 
    foreach (object item in section.ReportObjects) 
    { 
     subReport = item as CRAXDDRT.SubreportObject; 
     if (subReport != null) 
     { 
      //loop code here 
     } 
    } 
} 

雖然這工作我會歡迎一個更好的解決辦法...

+0

我一直在尋找通過爲CRAXDDRT COM接口,我覺得這是對你最好將能夠拿出來。沒有基本的ReportObject接口,所以你需要像在這裏一樣使用'as'運算符。 – pstrjds