Announcement

Collapse
No announcement yet.

Daten im DataGridView anzeigen

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

  • Daten im DataGridView anzeigen

    Hi,

    ich habe eine Anwendung geschrieben, in der ich die komplette Logik schon implementiert habe. Jetzt wollte ich das alles durch ein DataGridView darstellen. Ich habe eine Liste von Instanzen meiner eigenen Klasse. Gibt es dann eine Möglichkeit diese automatisch im DataGridView anzeigen zu lassen (ohne Datenbank) ohne dafür die ganze Logik implementieren zu müssen? Es sollen nur bestimmte Felder der Klasse angezeigt werden.

    EDIT:
    Die Situation ist die. Ich habe ein DatagridView, das ich jedoch nicht an eine Datenbank binden will. Die Daten darin muss ich aber speichern (geringe Datenmenge funktioniert mit einer csv. Datei) Aus diesen Daten muss ich dann ein TreeView erzeugen. Welche Klassen würden sich dafür am besten eignen?



    LG
    Neodym
    Zuletzt editiert von Neodym; 19.02.2011, 22:48.

  • #2
    Du kannst Daten auch ohne ein DataGridView speichern. Das DataGridView zeigt die Daten nur an. Diese in ein DataGridView zu schreiben nur um sie zu speichern wäre totaler Blödsinn.

    CSV geht im einfachsten Fall (wenn keine " im String vorkommen) ganz einfach mit String.Join bzw. einem Klasse die Deine Objekte in einen durch ; getrennten String umwandelt und File.WriteText()

    Comment


    • #3
      Gibt es dann eine Möglichkeit diese automatisch im DataGridView anzeigen zu lassen (ohne Datenbank) ohne dafür die ganze Logik implementieren zu müssen
      Databinding heißt das man Properties von Klassen binden kann. Bzw. bei UI Controls wie Grids, Listboxen etc. Listen von Klassen mit Properties. Ob diese Liste nun Datatable heißt und die Klassen mit Properties darin DataRow heißt oder irgendwie anders und woher die Daten darin kommen ist vollkommen egal. Der Mechanismus des Databinding hat rein gar keine Sonderbeziehung zu Datatable /Datarow sondern das geht automatisch mit jeder beliebigen Klasse. Ich habe also gar keine Vorstellung was für einer Logik du da meinen könntest.

      Welche Klassen würden sich dafür am besten eignen?
      Irgendeine Klasse mit Properties für die Daten.

      Die Daten darin muss ich aber speichern (geringe Datenmenge funktioniert mit einer csv. Datei)
      Wenn du bereits eine Klasse hast serialisiere die einfach weg. Z.B Mit dem XMLSerializer oder dem BinaryFormatter.

      Comment


      • #4
        Ich brauche das DataGridView damit der Client die Daten editieren kann. Dann wird was mit den Daten berechnet und die berechneten Daten sollen in einem TreeView angezeigt werden. Die csv Datei benötigt man nur, dass die eingegebenen Daten gespeichert werden.
        Die Daten, die darin gespeichert werden sollen sind integer, also ist das mit dem " kein Problem.

        Ich habe schon geschaut. Das DataGridView kann man ja manuell befüllen. Dann müsste ich aber die Daten immer auslesen und einlesen und Extramethoden implementieren für das Speichern. Außerdem müsste ich die TreeView Darstellung auch selbst implementieren. Geht das nicht einfacher?

        LG

        Comment


        • #5
          Erzähl uns mehr über deine Daten.
          DataGridView stellt Listen dar ein Treeview aber Baumstrukturen erstmal sehe ich nicht wie man sinnvoll die gleichen Daten in beiden Controls (ohne Informationsverlust oder Informationshinzulügen) darstellen kann.

          Wenn wir dein Problem kennen/verstehen lässt sich bestimmt eine vernünftige Datenstruktur vorschlagen die in beiden Controls darstellbar wäre.

          Comment


          • #6
            Also die Sache ist die.
            In dem DataGridView kann man Daten eingeben. Diese Daten dienen dann dazu ein Objekt einer Klasse zu erzeugen. Mit den verschiedenen Objekten wird dann rumgerechnet und sortiert. Dann sollen die Objekte, die aus den Daten des Clients hervorgehen, sortiert in einem TreeView angezeigt werden.

            Comment


            • #7
              Du hast jetzt aber noch nicht erklärt, wozu du die Daten in einer CSV-Datei abspeichern willst. Es gibt doch weitaus mächtigere und elegantere Möglichkeiten, Daten zu persistieren.

              Comment


              • #8
                Ich will das in einer CSV Datei machen, weil die Datenmenge wahrscheinlich sehr gering wird. Also das sind max vllt. 50 Datensätze (jeder Datensatz enthält jeweils 4 spezielle Werte.
                Das Ding könnte ich dann locker im RAM halten und könnte darauf schneller zugreifen, als auf eine Datenbank.
                Hinzu kommt, das ich mich mit Datenbanken nicht wirklich auskenne. Ich habe mir zwar schon ein paar Beispiele angeschaut, aber irgendwie ist mir aufgefallen, dass man beim Erstellen den Datentyp bei einer Tabelle angeben muss. Was, wenn ich in der Datenbank Objekte meiner instanzierten Klasse speichern möchte? Wie geht das dann? Oder muss ich dann nicht die Objekte speichern, sondern nur die relevanten Felder?
                Wie kann ich das dann dazu binden. Also nach dem Motto: Erzeuge die Datensätze anhand der verschiedenen Objekte mit den und den Feldern? Oder kann man doch Objekte darauf speichern.

                LG

                Comment


                • #9
                  Eine CSV Datei existiert aber nicht im RAM, sondern auf der Festplatte. Wenn Du die Dinger im Speicher haben willst. Initialisiere irgendwelche Objekte und behalte die einfach im Programm.

                  Comment


                  • #10
                    Sry, hast Recht.
                    Aber zurück zu meiner Frage: Wie kann ich das am besten machen, ohne dass ich alles manuell erstellen muss?
                    Es muss doch auch einfacher gehen?

                    Comment


                    • #11
                      dann müsstest du aber auch keine Programme mehr schreiben ...

                      du kannst dir ja eine Funktion in der Klasse anlegen die aus deiner Klasse eine Zeile für die CSV datei erstellt.
                      und eine Funktion um das umgekehrte zu erreichen ...

                      und Anzeigen geht ja dann über Datenbindung ganz Komfortabel
                      Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                      Comment


                      • #12
                        Ok, habe das Binding implementiert.
                        Mein Problem:

                        Ich habe Eigenschaften, die voneinander abhängen. Beispielsweise hängt die Eigenschaft Volumen (von Zylinern) vom Radius und der Höhe ab. Wie kann ich dann erreichen, dass bei einer Änderung des Radius sofort das neue Volumen berechnet wird.
                        Außerdem ist eines komisch:
                        Standartmäßig ist es ja so, dass der User immer neue Rows hinzufügen kann. Ich habe die AllowUserToAddRow Eigenschaft auf true gesetzt. Es hat nicht funktioniert, ich habe nachgeguckt und gefunden, dass der Client nur dann neue Rows hinzufügen kann, wenn die IBindingList.AllowNew Eigenschaft auf true ist.
                        Bloß blöd, dass meine Liste nicht dieses Interface implementiert. Das tut aber BindingList. BindingList wiederum bietet aber nicht die Möglichkeit die Elemente zu sortieren, was ich aber brauche.
                        Da man nicht immer das Rad neu erfinden sollte, wäre es für Leute, die sich den Code später durchlesen besser, wenn man keine eigene neue Liste erstellt, die diese Eigenschaften hat.
                        Kennt jemand eine bessere Klasse?
                        EDIT
                        Irgendeine Regelung schreibt vor, dass ich noch nicht einmal existierende OpenSource BindingLists benutzen darf.

                        LG
                        Neodym
                        Zuletzt editiert von Neodym; 25.02.2011, 22:49.

                        Comment


                        • #13
                          http://dotnet-snippets.de/dns/sortab...t-SID1008.aspx

                          Comment


                          • #14
                            Habe ich auch schon gefunden.
                            Ich darf aber keinen fremden Code benutzen.
                            LG

                            Comment


                            • #15
                              zu deiner Frage mit dme Volumen:

                              Ich denke du hast ja jetzt die INotifyPropertyChanged implementiert?! WEnn dem so ist dann lass bei Änderung der Höhe nicht nur Anzeigen dass sich Höhe geändert hat sondern auch das Volumen.
                              Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                              Comment

                              Working...
                              X