Announcement

Collapse
No announcement yet.

Daten neben der BindingSource aus DataTable aktualisieren

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

  • Daten neben der BindingSource aus DataTable aktualisieren

    Hallo,dann versuchen wir es mal hier :-D

    folgendes Problem
    ich habe eine Datatable gefüllt mir Kundendaten, diese ist mit einer Bindingsource verbunden.
    Angezeigt werden jetzt ein Bruchteil der Daten in Textfeldern die auch änderbar sein sollen.
    Punkt 1 gibt es eine Möglichkeit, ohne jedes Feld auf Änderungen abzufragen, in der Bindingsource zu merken wenn der User was ändert ? ( bs1.CurrentChanged war mein Ansatz aber das geht irgendwie nicht)

    Punkt 2
    nachdem geändert wurde möchte ich jetzt nicht einfach nur die Textfelder aktualisieren( bs.endedit : da.update(dt) ) sondern auch andere Felder der Tabelle mit aktualisieren. zB. das Feld letzteÄnderung etc...

    Leider klappt nichts meiner versuche...
    jemand ne idee?

  • #2
    Das könnte über das ListChanged Event gehen. Könnte weil dein ursprüngliche Datenmenge dafür das IRaiseItemChangedEvents Interface implementiert haben müsste, wie z.B. eine Bindinglist. Vielleicht reicht auch das INotifyPropertyChanged Interface an den einzelnen Objekten in der Liste hinter deiner BindingSource, bin mir da nicht ganz sicher.

    Edit: Sorry. Habe deine Frage nicht richtig gelesen. Propertyänderungen in den Listenelementen wirst du so nicht detektieren. Ich glaube nicht das man das überhaupt an der BindingSource kann.

    Comment


    • #3
      hab ich richtig verstanden:

      Also nen Event wenn jemand was ändert wirds wohl nicht geben, also programmier ich mir ne Zustandsänderung in jedem Textfeld...


      zu der anderen Sache ?
      genauer:
      Datenkommen aus der datebank in einen sqladapter -> datatable -> bindingsource -> textfeld

      jetzt wird geändert im textfeld

      mein wünschenswertes Ziel:
      Änderungen in dem Textfeld werden zurückgeschrieben in der Datenbank und gleichzeitig werden weitere Felder mit geändert und zurück geschrieben...
      Zuletzt editiert von Ben Graf; 13.12.2010, 14:48.

      Comment


      • #4
        Normalerweise würde man wohl in seiner Datenquelle INotifyPropertyChanged implementieren und die dort dann bereitgestellten Events verwenden.

        Bei Datatables wäre das wohl ColumnChanged. Bin da aber nicht besonders bewandert.

        Comment


        • #5
          also das mit dem notifyproperty hab ich nicht verstanden
          ich hab die Datatable einfach mal with events deklariert und columchanged getestet
          das wird aber nur aufgerufen wenn ich durch die daten navigiere nicht wenn ich ein updatecommand durchführe auf dem ganzen...

          Comment


          • #6
            Wie gesagt INotifyPropertyChanged wäre der ~Standardweg~ in .Net. ADO.Net selbst macht aber weitestgehend sein eigenes Ding. Den Kommentar kannst du also solange du nur mit Datasets und Konsorten arbeiten willst ignorieren.

            ich hab die Datatable einfach mal with events deklariert und columchanged getestet das wird aber nur aufgerufen wenn ich durch die daten navigiere nicht wenn ich ein updatecommand durchführe auf dem ganzen...
            Ein updatecommand ändert nichts an der DataTable sondern nur in der Datenbank. Warum sollte da irgendein Event feuern

            Comment


            • #7
              mhh ok sorry ich verstehs einfach nicht die ganze ado.net .net Sache
              ich sitze hier vor 2 dicken wälzern und komm nicht weiter

              wie mach ichs denn das die datatable was mit bekommen
              ich dachte so gehts


              Dim cmd As New SqlCommand("Update Kunde set dtAusgeblendet = -1 where idKunde=" & LabelKundenNr.Tag, gbl.conn) '
              If gbl.OpenDB() = False Then Exit Sub
              daKunde.UpdateCommand = cmd
              daKunde.Update(dtKunde)
              gbl.CloseDB()

              Comment


              • #8
                ok ne knaupvariante hätte ich hinbekommen

                also sobald ich auf meinen Löschenbutton drücke führe ich den code von eben aus und machen ein

                bs.removecurrent()

                somit verschwindet der datensatz
                aber ab dann darf keiner mehr was ändern in den nächsten Datensätzen...
                sonst wird er doch noch richtig gelöscht beim nächsten getchanges() vergleich

                statt nur ausgeblendet zu werden :-(


                edit:
                ne geht doch nicht ich nehms wieder zurück nach dem RemoveCurrent ist die vorherige änderung durch den commander auch hinfällig, verstehe wer will
                für mich ist das alles nicht logisch :-/

                Comment


                • #9
                  Dein Code schiebt Änderung von der Datatable in die Datenbank (one way). Da nichts an der Datatable geändert wird gibt es auch keinen Grund Events zu feuern.

                  Wenn du Änderungen aus der Datenbank zurück bekommen willst musst du die Daten auch wieder aus der Datenbank lesen. Also nach dem Update einen Select absetzen. Beides kann auch im gleichen SQLCommand sein!

                  Comment


                  • #10
                    ahha und wie würde so ein sqlcommand dann aussehen ?

                    Comment


                    • #11
                      z.B. so

                      [Highlight=SQL]Update meineTabelle set meinFeld = @meinFeld, meinFeld2 = @meinFeld2 where meinePrimaryKeySpalte = @meinePrimaryKeySpalte;
                      Select meinFeld, meinFeld2 from meineTabelle where meinePrimaryKeySpalte = @meinePrimaryKeySpalte[/Highlight]

                      Konkreter Syntax (da SQL) hängt von deiner Datenbank und verwendeter Zugriffstechnik(ODBC,OLEDB,nativ etc.) ab. Der Rest bleibt entsprechend deinem Code.

                      Comment


                      • #12
                        sorry du hast mich falsch verstanden
                        der sql befehl oder befehle sind mir klar

                        ich dachte jetzt an sowas wie :
                        ich gebe der datatable oder dem dataadapter einen Selectcommadn und ein updatecommadn mit
                        und sobald ich update oder so aufrufe
                        aktualisiert er mir alles
                        ?
                        muss ich nach einem Update in der Tabelle ein komplett neues Fill machen ?

                        wie stellen die sich das denn vor bei ner Mulituser Anwendung mit 60000 Kunden?!
                        andauernt das ganze ding neuladen ?

                        also ich programmiere seit 10 Jahren in Vb6 und bin jetzt seit nem halben Jahr dran mit der umsteigerei
                        aber die Logik hinter der ganzen Sache verschwindet von Tag zu Tag :-D

                        Comment


                        • #13
                          muss ich nach einem Update in der Tabelle ein komplett neues Fill machen ?
                          Nein. Du solltest in einem SqlCommand einfach beide SQL Befehle absetzen. Dein gezeigter Code sollte eigentlich unverändert bleiben du musst zu deinem UPDATE SQL nur auch noch einen passenden SELECT direkt hinterher angeben so das gleich nach dem Update der gerade geschrieben Datensatz auch wieder gelesen wird. In der Datatable wird dann der aktuelle Datensatz durch die neu gelesenen Daten ersetzt.(Wenn du nicht gerade den Primary Key des Datensatz geändert hast. Darüber wird der Datensatz nun mal identifiziert)

                          also ich programmiere seit 10 Jahren in Vb6 und bin jetzt seit nem halben Jahr dran mit der umsteigerei
                          aber die Logik hinter der ganzen Sache verschwindet von Tag zu Tag :-D
                          Dann hast du mit ADO gearbeitet. Von dieser Denke musst du dich trennen. Eine Datatable ist definitiv etwas anderes als ein Recordset. Und die Logik schwindet nicht sie wird nur durch eine andere ersetzt.

                          Comment


                          • #14
                            aber wie meinst du füge ich das hinzu ?
                            so?

                            unter dem Löschen Button so irgendwie

                            If gbl.OpenDB() = False Then Exit Sub
                            Dim cmd As New SqlCommand("Update ..., gbl.conn) '
                            dim cmd2 as new sqlcommand("select ......)
                            daKunde.UpdateCommand = cmd
                            dakunde.selctcomannd = cmd2
                            daKunde.Update(dtKunde)
                            gbl.CloseDB()

                            das funktioniert irgendwie nicht

                            noch zu der INotifyPropertyChanged Sache ich hab da in meinem Buch irgend eine Beispiel Anwendung heute morgen ancprogrammiert
                            die benutzt allerdings irgendwelche sqldependencys um scheinbar die Datenbank zu überwachen.
                            funktioniert irgendwie garnicht so wie es soll :-D
                            der ballert im Sekundentakt Änderungen obwohl ich nur die Datenfülle
                            aber irgendwie scheint das ja der bessere Weg zu sein

                            hast du vielliecht irgendwo mal ein sinnvolles Beispiel auf unterster ebend zu dem "INotifyPropertyChanged" ich find nix leider....

                            so auf die Art

                            Daten in SQLadapter und datatable
                            ich änder was das INotifyPropertyChanged merkt das schreibt die Änderung in die Datenbank und aktualisiert meine datatable :-)

                            ich hab das Gefühl mir fehlt nur irgendwie der kleine Schubs um den Einstieg zu verstehen :-/ ich komm nur mit den ganzen Beispielen in den Büchern nicht weiter da die immer nur auf Einzelplatz Bezug gehen.
                            DANKE schon mal

                            Comment


                            • #15
                              Code:
                              Dim cmd As New SqlCommand("Update ... ; Select ....", gbl.conn) '
                              Einfach im gleichen Command! Vermutlich durch ; getrennt.

                              Comment

                              Working...
                              X