+1 800 256 3608 (toll-free in North America) or +49 7531 9060-10| service@combit.com

ObjectDataProvider ohne Tabellenname

Guten Tag,

ich bin an einer Neuentwicklung einer bestehenden Software, mit etwa 300 Berichten, dran.
Nun wurde in diesen alten Berichten die Datasource ohne Tabellenname übergeben, so das die Werte direkt unter dem Reiter “Felder” angezeigt werden.

Nun versuche ich mit dem ObjectDataProvider das selbe Verhalten zu erzeugen, so das ich diese ganzen berichte nicht anpassen muss, aber bin bisher erfolglos.

Im alten Programm sind die Felder unter “Datasource” direkt unter “Felder”.
Neu

Ich wäre für jede Hilfe dankbar.

Unsere Empfehlung wäre hier die DOM Api zu verwenden, d.h. das Projekt im DOM öffnen, die Felder umbenennen (mit dem Tabellen Alias z.B. aus Name wird Adresse.Name).
Genauso müsste noch die TableID auf die verwendete Tabelle gesetzt werden, der Code könnte wie folgt ausschauen.
Quick & Dirty Beispiel:

private static void ModifyProject(ListLabel ll, string projectFile)
        {
            ProjectList proj = new ProjectList(ll);
            proj.Open(projectFile, LlDomFileMode.OpenOrCreate, LlDomAccessMode.ReadWrite, false);
            ObjectReportContainer repcontainer;
            foreach (DomItem obj in proj.Objects)
            {
                if(obj is ObjectReportContainer)
                {
                    repcontainer = (ObjectReportContainer)obj;
                    if(repcontainer.SubItems.Count >0)
                    {
                        SubItemTable table = (SubItemTable)repcontainer.SubItems[0];
                        table.TableId= "Adresse";
						//hier die DataLines der Tabelle durchgehen, die Felder holen und den Content ersetzen.
                    }
                    
                }
            }
            proj.Save();
            proj.Close();
            

        }

Sie finden in unserem Beispiele Verzeichnis “…\combit\LL26\Beispiele\Microsoft .NET” Beispiele für die Verwendung der DOM Klassen.

Guten Tag,

diese Lösung funktioniert nur bedingt, ist sie ja ein Import mit Verändern der Berichtsdatei. Mit dieser Lösung müsste ich also die .lst zwei mal vorhalten, einmal in neu und einmal in alt.
Mein Ziel ist es aber eigentlich die Dateien zwischen der noch laufenden alten Instanz und dem neuen Programm zu teilen.
Ich suche also eher einen On-The-Fly Weg davon oder noch besser wäre ein Weg die Felder wieder direkt unter “Felder” einzufügen, ohne einen Tabellennamen davor.

Edit: Auch fällt mir gerade auf das unsere Berichte in mehrere Dateien aufgeteilt sind (Footer, Header, etc) und ich so ja im voraus wissen müsste, welche Teile ein Bericht genau enthält, so das ich alle Berichte entsprechend durchlaufen kann.

Gruß

Hallo Herr Jensen,
Sie müssten die Dateien ja nicht permanent speichern, sondern könnten diese auch jeweils temporär ändern. Welche Dateien alle verwendet werden können Sie via LlGetUsedIdentifiers() abfragen. Hier gibt es ein ensprechendes Flag für die Files.

Details zu LlGetUsedItendifieres() können Sie unserer Dokumentation unter folgenden Direktlinks entnehmen:
.NET Hilfe
List & Label Programmierer Referenz

© combit GmbH