LL_NoData_Exception bei leeren DataTables

Hallo,

meine C# Anwendung nutzt ein Dataset mit mehreren DataTables. Diese DataTables übergebe ich an List&Label und habe damit auch erfolgreich meinen Bericht im Designer erstellt. Je nachdem welche Auftragsnummer in meine Anwendung übergeben wird, werden die DataTables mit unterschiedlichen Informationen befüllt. Bei manchen Auftragsnummern beinhalten manche dieser DataTables keine Daten. Wenn ich dann also versuche meinen vorherigen Bericht zu öffnen (Designer, Vorschau oder Druck) funktioneirt es nicht. Ich bekomme nur die Meldung

“Eine Ausnahme vom Typ "combit.Reporting.LL_NoData_Exception" wurde ausgelöst.”

Wenn ich versuche die DataTables ohne Daten auszufiltern, dann bekomme ich eine Meldung, dass die verwendeten Tabellen nicht vorhanden sind.

                            var allTables = new System.Data.DataTable[]
                            {
                                    ds.BossDoctor,
                                    ds.Customer,
                                    ds.Doctor,
                                    ds.Examination,
                                    ds.ExaminationGroup,
                                    ds.ExaminationName,
                                    ds.ExaminationType,
                                    ds.Institut,
                                    ds.Pathologies,
                                    ds.Patient,
                                    ds.Preparation,
                                    ds.PreparationGroupe,
                                    ds.ResultName
                            };

                            IList[] listArray = allTables.Where(x => x != null && x.Rows.Count > 0).Select(x => x.DefaultView as IList).ToArray();

Ich hatte erwartet, dass der Bericht sich trotzdem öffnet und nur den Bereich ausblendet, der keine Daten enthält. Wie müsste ich hier vorgehen? Muss ich im Designer dann immer vorher prüfen, ob das DataTable Daten enthält? Bsp.: Cond(BossDoctor != null, BossDoctor.Text, “”)

Hallo,

es ist wichtig für das Reporting, dass die Datenintegrität zwischen Anwendung und den verwendeten Bericht immer eingehalten wird. Das bedeutet, dass das Layout im Designer immer auch mit der exakt gleichen Datenstruktur befüllt werden muss von der Anwendung. Wenn man da nun einfach DataTables weglässt weil diese keine Rows enthalten, stimmt die Datenintegrität nicht mehr und es kommt die Meldung, dass eben Tabelle X fehlt.

Man könnte nun versuchen immer ein Dummy-Row anzulegen und im Layout im Datenfilter entsprechend “rausfiltern”.

Oder alternativ könnte man noch versuchen zur Laufzeit via DOM zu schauen, ob man die Tabelle im Layout nicht einfach löscht, wenn sich kein DataTable dafür ergibt. Das müsste dann via GetFromParent und dem Event DefinePrintOptions klappen dann.

Anber generell ist ein sich änderndes Datenmodell immer eine Herausforderung für einen Bericht, der auf ein gezieltes Datenmodell hin erstellt wurde im Designer.

Hi Akin, der Oliver hat ja schon ziemlich ausführlich geantwortet, alternativ wäre evntl. eine andere Datenquelle möglich, z.B. Json?
Da könntest den SchemaAwareJsonDataProvider verwenden, der bei solchen Anforderungen auch gerne verwendet wird.