Announcement

Collapse
No announcement yet.

Daten im DataGridView anzeigen

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

  • #16
    Habe ich auch schon gefunden.
    Ich darf aber keinen fremden Code benutzen.
    Dann solltest du das .NET Framework gleich deinstallieren. Oder hast du das selbst geschrieben? Fremder Code ist kein Problem solange man ihn versteht. Wenn der dir nicht gefällt kannst du denn immer noch als Denkanregung verwenden um eine eigen SortableBindingList zu schreiben.

    Comment


    • #17

      Ich denke du hast ja jetzt die INotifyPropertyChanged implementiert?!
      Ja, zumindest habe ich es versucht. Aber ich stehe irgendwie gerade auf dem Schlauch was das betrifft. Habe jetzt schon ewig gesucht, es funktioniert aber nimmer noch nicht.
      Also dieses Event braucht man ja, wenn in der Datenquelle was geändert wird und das auf die Liste übertragen soll.
      Aber eigentlich bräuchte ich das ja nur für das Volumen. Wenn ich im DataGridView einen Wert ändere, wird dieser ja automatisch über den Setter geändert. Also brauche ich für die einzelnen Werte ja gar nicht dieses Event behandeln, oder liege ich da falsch?

      Und jetzt zum Volumen. Wenn ich die Länge ändere, ändert sich ja das Volumen. Also müsste ich nur eine Methode schreiben die das Volumen ausrechnet und speichert. Aber dann wird der Wert des Volumens nicht direkt übertragen. Erst wenn ich in das Feld mit dem entsprechendem Volumen hineinklicke erscheint ein neuer Wert. Wie bekomme ich das hin, dass es sofort erscheint?

      LG

      Comment


      • #18
        in den Setter Methoden jeder Eigenschaft schreibst du noch einen Aufruf des PropertyChanged Events hinein ... ala

        [highlight=c#]
        public double Height
        {
        get{ return this.zylinderheight; }
        set{
        this.zylinderheight = value;
        onPropertyChanged("Height");
        onPropertyChanged("Volume");
        }
        }
        [/highlight]

        Das führt dazu dass in deiner Liste bei einer neuen Höhe sofort auch der Volumen wert aktualisiert wird. Natürlich muss dafür auch eine Property Volume existieren. Und du musst dafür sorgen dass diese dann auch den neu berechneten WErt enthält.
        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

        Comment


        • #19
          Ja, ok das habe ich, aber was steht dann in dem Eventhandler drin?

          Comment


          • #20
            [QUOTE]Ja, ok das habe ich, aber was steht dann in dem Eventhandler drin? /QUOTE]

            Ist das wichtig was da drin steht? Die PropertyChanged Events (entsprechend dem INotifyPropertyChanged Interface) werden vom gebunden Control (also z.B. auch dein DataGridView) gefangen. Im Beispiel von das-d weiß das Grid also das nach dem setzen von Height es selbst Height und Volume neu einlesen muss. Wie es das dann genau macht ist doch eigentlich egal.

            Comment


            • #21
              Ok, habe es jetzt hinbekommen
              Code:
              public uint Height
                      { 
                          get { return m_height; }
                          set {
               
                              m_height = value;
                              OnPropertyChanged("Height");
                              OnPropertyChanged("Volume");
              
                          }
                      }
              und dann außerhalb irgendwo in der Klasse
              Code:
              public event PropertyChangedEventHandler PropertyChanged;
              Und dann eben in einer Methode
              Code:
              protected void OnPropertyChanged(String propertyName)
                      {
                          PropertyChangedEventHandler tempHandler = PropertyChanged;
                          if (tempHandler != null)
                          {
                              //... Die Wertaktualisierungen
                              tempHandler(this, new PropertyChangedEventArgs(propertyName));
                          }
                      }
              Ok, also zuerst weiß man, dass der entsprechende Wert geändert werden soll. Dann geht man in eine Methode und ändert die. Aber was bewirkt:
              Code:
              tempHandler(this, new PropertyChangedEventArgs(propertyName));
              Eines ist auch komisch. Also ich weise tempHandler PropertyChanged zu. Aber ich habe doch gar nicht gesagt, dass die Anwendung sich melden soll, wenn das Event auftritt. Also bei einem Button wäre es im übertragenen Sinne ja
              Code:
              this.btn_runLogic.Click += new System.EventHandler(this.btn_runLogic_Click);
              Warum bekomme ich das Event trotzdem, obwohl ich es nicht abonniert habe?
              Und dann kommt halt in
              Code:
              private void btn_runLogic_Click(object sender, EventArgs e)
                      {
              //...
                      }
              die Logik.
              Warum funktioniert das trotzdem??

              Comment


              • #22
                Warum bekomme ich das Event trotzdem, obwohl ich es nicht abonniert habe?
                Du denkst verkehrt herum. Du bist derjenige der diesen Event feuert. Der Abonnent ist z.b. das Grid und dein Klasse ist der Publisher des PropertyChanged Events.
                Mit

                Code:
                tempHandler(this, new PropertyChangedEventArgs(propertyName));
                wird also der Event gefeuert und die abonnierten EventHandler aufgerufen. Um bei deinem Button Beispiel zu bleiben. Du bist der Button und der Setter von Height entspricht dem Click auf den Button und löst hier halt PropertyChanged Events aus anstatt Click Events.

                Comment


                • #23
                  schön dass es geklappt hat. Und gut dass du die Antwort den anderen bereitstellst
                  Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                  Comment

                  Working...
                  X