Announcement

Collapse
No announcement yet.

12.000 Objekte erstellen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 12.000 Objekte erstellen?

    Bin neu in der OO und damit auch C#.
    Habe sehr viel Erfahrung mit Datenbanken und funktionsorientierter Programmierung für Webapplikationen (PHP).
    Brauche nun aber C# (o.ä. clientseitige Programmierung) da ich auch Zugriff auf lokale Geräte und Austausch mit Access-DBs realisieren muss.


    Habe nun folgendes Problem:

    Ich möchte über je einen Monat hinweg ca. 400 Objekte/Tag einigermaßen übersichtlich darstellen können.
    Die Objekte sind recht einfach und brauchen in dem Sinne nur einen Status (frei/belegt), sowie eine Referenz zu einem Nutzer und einem Ort.
    Objekte können auch über mehrere Tage die gleichen Eigenschaften haben.

    Meine Fragen (Ein paar Stichworte würden mir wahrscheinlich reichen):
    Wie initialisiere ich in einer For-Schleife die entsprechenden Objekte?
    Wie kann ich die Objekte mit einem eindeutigen Namen versehen? Gibt es sowas wie Eval aus JS? Brauche ich für jeden Tag ein Objekt oder macht es mehr Sinn, die Zeitkomponente mit an das Objekt zu binden?

    Welches Steuerelement ist für die optische Respräsentation der einzelnen Objekte am Besten geeignet?
    Kann ich dafür Buttons verwenden? Rechtecke? Andere Idee?
    Sie müssen einzeln die Farbe wechseln können und sollen (in Zukunft) auch per Drag-and-Drop verschoben werden können (bzgl. Ort und Zeit).

    Welches Steuerelement ist für die optische Respräsentation des gesamten Monats am Besten geeignet?
    Ich habe mir ein Panel vorgestellt, in dem gescrollt werden kann. Horizontal die Tage, vertikal die Orte (je Ort 1-6 Objekte).
    Eine Listview reicht IMHO nicht, da ich dort nicht pro Zelle 6 Objekte mit unterschiedlichen Farben etc. platzieren kann.

    Any Ideas?
    Würde mich über jede Anregung freuen.

    Beste Grüße,
    new2oo

  • #2
    Hallo,

    verstehe ich es richtig, dass die Informationen Deiner Objekte direkt aus der Datenbank geholt werden? Könnte es sich um Ergebnisse eines SELECT handeln?

    Dann scheint mir folgendes Vorgehen das einfachste (vielleicht auch praktischste) zu sein:
    1. Erzeuge ein einfaches Dataset; auf Details (DataTable und DataColumns) kannst Du notfalls verzichten. (Die werden ggf. automatisch erzeugt.)
    2. Hole die Daten per SELECT in das Dataset; Stichwort dazu: DataAdapter.Fill-Methode.
    3. Benutze zur Navigation ein MonthCalendar-Steuerelement.
    4. Benutze zur Anzeige der Daten eines Tages ein DataGridView, das auf die gefilterte DataTable zugreift.

    Die einzelnen "Objekte" sind dann die DataRows der DataTable. Sie benötigen keine eigenen Bezeichner; als Schleifen stehen (wenn überhaupt erforderlich) for und foreach zur Verfügung.

    Ich hoffe, meine Tipps führen Dich weiter. Auf spätere (konkretere) Fragen findest Du natürlich ebenfalls Hilfe. Gruß Jürgen

    Comment


    • #3
      Vielen Dank für Deine Antwort Jürgen.

      Auf die Idee, die Arbeit an die DB auszulagern bin ich auch schon gekommen, es hilft mir allerdings nicht besonders weiter.
      Zwar stammen die Eigenschaften aus einer Select-Abfrage, allerdings muss ich die Daten noch weiter optisch aufbereiten.

      Konkreter:
      Jeder Tag hat 100 Orte mit 1-6 Elementen.
      Diese Elemente müssen ein- oder ausgeschaltet werden können und sind einem Nutzer zugeordnet. Diese Einzelelemente müssen sowohl an andere Orte als auch andere Tage verschoben werden können (DnD).
      Dazu kommt noch, daß zumindest zwei Wochen als ganzes (bzw. scrollbar ohne neuladen) sichtbar sein muss, d.h ein einzelner Tag hilft mir nicht weiter.
      Um das ganze noch weiter zu verkomplizieren, müssen regelmäßig gesamte Orte über mehrere Tage vom gleichen Nutzer belegt werden - und dann auch noch als Teilgruppe aus 1-6 Elementen verschoben werden können.

      Ich habe gesehen, daß man im MonthCalender auch mehrere Tage selektieren kann, von daher kann es für die reine Navigation schon taugen - alllerdings muss die Darstellung auch entsprechend sein und da hilft mir ein standardisiertes DataGrid nicht so, denn ich muss u.U. ja mehrere Select-Anfragen ausführen. Das alles in einer Abfrage auszuführen halte ich für umständlich, vor allem da es mir bezüglich der o.g. Datenmanipulation nicht viel hilft.

      Ich habe in der Zeit auch weiterexperimentiert.
      Die gesamte Ansicht über mehrere Tage habe ich in einem Panel mit Scrollbars paltziert. So weit so gut.
      Für die einzelnen Orte an den jeweiligen Tagen habe ich Labels benutzt, was im erstem Moment gar nicht so schlecht erschien. Allerdings akzeptiert es nur Strings und keine weiteren Labels o.ä. als Inhalt.
      Ich habe Rechtecke ausprobiert, hierbei ist aber der Haken des Neuzeichnens beim Scrollen, was evt. zu zeitintensiv werden könnte und mir irgendwie zu frickelig erscheint.

      Ich hätte lieber, daß ich die (inneren) Einzelelemente relativ zum Elternelement des Ortes positionieren kann.

      Im Endeffekt brauche ich eine Art Container für weitere Objekte für jeden einzelnen Tag und Ort (summa summarum 30 Tage * 100 Orte=3000). In HTML geht das einfach mit geschachtelten Tabllen und DIVs/SPANs.
      Ich bin mir nicht sicher, ob ich nun einzelne Panels nehmen muss, oder welches andere Steuerelement andere Elemente aufnehmen kann.
      Außerdem weiß ich noch nicht wie sich die (hohe?) Anzahl der Objekte auf die Performance auswirkt.

      Kann ich denn überhaupt DnD-Operationen ausführen, wenn das Objekt keinen Bezeichner hat?

      Hmmh, stehe im Moment etwas wie die Kuh vor dem (neuen) Tor...
      Ich bin für jeden Lösungsansatz dankbar!

      Beste Grüße,
      Phil.

      Comment


      • #4
        Zur Veranschaulichung:

        Ich meine ungefähr sowas...
        Attached Files

        Comment


        • #5
          Hallo,

          es gibt ja einen wichtigen Grundsatz: Geschäftslogik und GUI sollen getrennt werden. Deshalb scheint es mir tatsächlich sinnvoll zu sein, ein Dataset als Container für die Daten zu verwenden und für die Anzeige auf diese Daten zuzugreifen.

          Für Deine Ideen kommst Du aber wohl nicht drum herum, ausgehend von einem DataGrid jede Zelle selbst zu zeichnen (zumindest fällt mir nichts Besseres ein).

          Gruß Jürgen

          Nachtrag: 1. Schachtelungen sind durch mehrere Tabellen in einem Dataset (mit DataRelation) möglich.
          2. 3000 Datensätze sind nicht mehr wenig, aber auch nicht viel; das Einlesen dürfte innerhalb von 1 bis 2 Sekunden erledigt sein.
          3. Der Zugriff auf einzelne Objekte erfolgt nicht unbedingt über die Bezeichner, sondern über Suchbegriffe (Indizes) und Filter, z.B. DataRowCollection.Find-Methode.
          Zuletzt editiert von Jürgen Thomas; 27.01.2007, 14:41.

          Comment


          • #6
            Danke nochmal für die schnelle Antwort.

            Originally posted by Jürgen Thomas View Post
            Für Deine Ideen kommst Du aber wohl nicht drum herum, ausgehend von einem DataGrid jede Zelle selbst zu zeichnen (zumindest fällt mir nichts Besseres ein).
            Wie kann ich das denn am Besten tun? Mit Rectangles?
            Oder gibt es ein Äquivalent zu HTML-Tables, welches z.B. auch sowas wie ein colspan versteht?
            Mit geht es insbesondere darum, die kleinen Kinderelemente mit dem größeren Elternelement Ort/Tag zu verbinden, so daß ich diese nicht alle explizit positionieren muss und diese auch nicht aus ihrem Elternelement herauskommen.

            Hat jemand dazu noch eine Idee?

            Beste Grüße,
            Phil.

            Comment

            Working...
            X