2012-11-26 3 views
1

Я пытаюсь зацикливаться на кристаллических подзаголовках с использованием CRAXDDRT в C# 2010, и я сталкиваюсь с проблемой. Я нашел много VB6 код, который выглядит следующим образом ...цикл через хрустальные отчеты sub с использованием 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 

... не работал бы как «Добрый» не метод на объекте. У кого-нибудь есть предложения обойти это? Прежде чем кто-либо предложит не использовать объекты 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

Я искал через COM-интерфейс для CRAXDDRT, и я думаю, что это о лучшем случае вы будете быть в состоянии придумать. Нет базового интерфейса ReportObject, поэтому вам нужно будет использовать оператор 'as', как вы здесь делаете. – pstrjds