Klasse flach darstellen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von BlueLagoonX.

    Klasse flach darstellen

    Moin,

    ich habe eine Klasse, aus welcher ich bei Fehlermeldungen ein Objekt erstelle, um dieses dann als Xml Datei per E-Mailzu verschicken.

    Diese E-Mail soll mein Report Programm erhalten, welches den Anhang anschließend auslesen und mir das Ergebnis in einem DGV anzeigen soll.

    Hier mal ein Beispiel der Klasse;

    VB.NET-Quellcode

    1. Public Class TestProzessor
    2. Public Property ID As Integer = 0
    3. Public Property ProcessorName As String = String.Empty
    4. Public Property ProcessorManufacturer As String = String.Empty
    5. Sub New()
    6. End Sub
    7. End Class
    8. Public Class Test
    9. Public Property ComputerName As String = String.Empty
    10. Public Property Processors As List(Of TestProzessor)
    11. Sub New()
    12. End Sub
    13. End Class


    Aus Test wird das Objekt erstellt. Dieses kann mehrere Prozessoren haben, wodurch der Datensatz im DGV nicht mehr angezeigt werden kann. Dort steht dann, logischerweise, nur noch ComputerName, Test+TestProzessor.
    Gibt es eine einfache Möglichkeit, die komplette Klasse flach darzustellen, so dass im DGV die Spalten ...

    ComputerName, ID, ProzessorName, ProcessorManufacturer, ID, ProzessorName, ProcessorManufacturer, ID, ProzessorName, ProcessorManufacturer ... stehen?

    Mir ist bewusst dass doppelte Spaltennamen sehr ungünstig sind, allerdings geht es mir nur ums Anzeigen der Datei.

    Da ich gerade noch dabei bin, die Form zum Anzeigen zu entwerfen, würde ich ansonsten dazu übergehen, für List Objekte kleinere DGVs/ListViews zu verwenden.

    Grüße :)
    Ich bin mir jetzt nicht ganz sicher, ob ich das richtig verstanden habe. Du möchtest das alle Daten in einer einzigen ROW im DGV angezeigt werden?

    Wenn ja, liesse sich so was mit einem Dataset/DataTablet sicher lösen. Der Vorteil am Dataset ist, dass die Daten als Xml Serialisiert werde können.

    Ein entsprechendes temporäres Modell für das Dataset bzw. DataTable kann per Code erstellt werden.

    Freundliche Grüsse

    exc-jdbi
    Moin,

    ich dachte mir fast, dass meine Frage etwas schwierig beschrieben ist :)

    Die Daten aus dem Objekt sollen in einer Zeile dargestellt werden,
    Spalte
    Herkunft
    ComputerName
    aus Test.ComputerName, gibt es einmalig
    IDaus Test.Processors.ID, kann es mehrmals geben, da Test.Processors eine List (Of Processor) ist
    ProcessorName
    aus Test.Processors.ProcessorName ...
    ProcessorManufacturer
    aus Test.Processors.ProcessorManufacturer ...

    Die Spalten ComputerName, ID, ProcessorManufacturer sind mehrfach ab hier möglich, da wie gesagt, aus List (Of T) kommt.

    Soll im DGV dann so aussehen:

    ComputerName, ID, ProzessorName, ProcessorManufacturer, ID, ProzessorName, ProcessorManufacturer, ID, ProzessorName, ProcessorManufacturer (...)


    ProcessorName | aus Test.Processors.ProcessorName ...
    Wie gesagt. Am besten die Werkzeuge DataSet/DataTable mal anschauen.

    EDIT: Mit Dataset siehts dann z.B. so aus (ca. 30 Zeilen Code)



    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „exc-jdbi“ ()

    BlueLagoonX schrieb:

    Gibt es eine einfache Möglichkeit, die komplette Klasse flach darzustellen, so dass im DGV die Spalten […] stehen?
    Manuell befüllen. Da 1 PC mehrere Prozessoren haben kann (1:m), ist eine automatisierte Darstellung nicht möglich. Daher würd ich einfach mit ner Schleife durch die Prozessorenliste gehen und das DGV "von Hand" befüllen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Du könntest in der Klasse TestProcessor die ToString Methode überschreiben damit du einen ausagekräftigen Namen für die Klasse bekommst.
    Die Eigenschaft Test.Processors mit dem Attribute Bindable(false) ausstatten und die Klasse Test um eine weitere Eigenschaft ergänzen. Diese Eigenschaft macht dann nichts anderes als die Processorliste in einem String zusammen zufassen. Damit solltest du dein gewünschtes Ergebniss erhalten.

    Ergebniss:


    Spoiler anzeigen

    C#-Quellcode

    1. class TestProcessor
    2. {
    3. public int ID { get; set; }
    4. public string Name { get; set; }
    5. public string Manufactor { get; set; }
    6. public TestProcessor(int id, string name, string manufactor)
    7. {
    8. ID = id;
    9. Name = name;
    10. Manufactor = manufactor;
    11. }
    12. public override string ToString()
    13. {
    14. return string.Format("ID: {0}, Name: {1}, Manufactor: {2}", ID, Name, Manufactor);
    15. }
    16. }
    17. class Test
    18. {
    19. public string ComputerName { get; set; }
    20. [Bindable(false)]
    21. public List<TestProcessor> ProcessorList { get; set; }
    22. public string ProcessorNames => string.Join(", ", ProcessorList);
    23. public Test(string pcName, List<TestProcessor> lst)
    24. {
    25. ComputerName = pcName;
    26. ProcessorList = lst;
    27. }
    28. }