Erster Datensatz auswählen, bzw Änderungen im DataGrid übernehmen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Trigoor.

    Erster Datensatz auswählen, bzw Änderungen im DataGrid übernehmen

    Hallo liebe vb-paradise-User,

    ich habe folgendes Problem:
    Ich habe ein DataGrid, welches an einer DataTable gebunden ist. Im DataGrid befinden sich in jeder Zeile Checkboxen. Bei einem Klick auf einen Button sollen die selektierten Datensätze in die DB gespeichert werden.

    Aber irgendwie kriege ich es noch nicht einmal hin, dass Änderungen im DataGrid übernommen werden. 8|

    Will heißen...das Ereignis(leave) wird nur ausgeführt, wenn man den Datensatz vorher markiert(also auf das kleine Dreieck drückt).
    Nun gut, dann dachte ich, dass ich halt mal wieder so nen Umstand machen muss, und den Datensatz mit irgendeiner Methode direkt nach dem Befüllen markiere (also die erste Row). Aber irgendwie will auch das nicht klappen.... X(

    Hat jemand vielleicht eine Lösung auf Lager?

    Schon einmal vielen Dank für jeden Tipp!!!

    Viele Grüße
    Trigoor
    Hallo ErfinderDesRades,

    nun ja, habe es vielleicht ein bisschen umständlich ausgedrückt.
    Die Änderungen verschwinden nicht. Nur ich kann die Änderungen nicht auslesen, habe also keinen Zugriff auf die Rows. Erst wenn ich den Datensatz markiere (die Sache mit dem kleinen Dreieck). Erst dann kann ich mir den Inhalt auslesen.

    Gruß
    Trigoor
    Nun ja, das durchlaufen der Rows klappt leider auch nicht..
    Es kommt folgende Fehlermeldung: Not supported when the grid is bound

    Dann habe ich mal die Zeile: "bdgKontoAnlegen.SetDataBinding(DsCC1, "KONTO_ANLEGEN", True)" mal auskommentiert um zu schauen was passiert, und trotzdem kam diese blöde Fehlermeldung. Also echt, sowas raffe ich nicht.

    Habe mal nach der Fehlermeldung gegoogelt...und es gab gerade mal 2 passende Einträge dazu...bei einem ging es um "Grid.rowscount, bzw grid.rows.count", und der andere Eintrag half mir auch nicht weiter.

    Vermutlich liegt es an dem DataGrid von ComponentOne. Ich bin ja Anfänger und kenne mich mit den anderen Tabellen-Komponenten nicht so aus, aber ich denke doch, dass es da nicht solche Probleme gibt, bzw. man im Netz einiges dazu erfahren kann.

    Schönen Mittag noch!
    Trigoor

    EDIT: Versuche mal nicht über das Grid die Daten auszulesen, sondern über das DataSet. Das wird wohl klappen. :rolleyes:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trigoor“ ()

    Trigoor schrieb:

    EDIT: Versuche mal nicht über das Grid die Daten auszulesen, sondern über das DataSet. Das wird wohl klappen.

    Jahaa! Davon sprach ich! Trennung von Gui und Daten! Das Gui ist für den User, die Daten sind für code-seitige Zugriffe.
    Liest du eiglich meine Antworten?

    ErfinderDesRades schrieb:

    Jahaa! Davon sprach ich! Trennung von Gui und Daten! Das Gui ist für den User, die Daten sind für code-seitige Zugriffe.
    Liest du eiglich meine Antworten?

    Schon, klaro..Du hast mir schon oft weiter geholfen. Nun ja, jetzt klappt es soweit, nun muss ich nur noch in die DB die Daten einfügen.
    Habe hier was cooles gefunden:
    msdn.microsoft.com/de-de/libra…8%28v=VS.90%29.aspx#Y3833
    Hier kann man irgendwie über gespeicherte Prozeduren Inserts einfügen. Habe von keine gespeicherten Prozeduren keinen Plan wie das gehen soll. Deswegen wollte ich es mal mit der Northwind-DB mal ausprobieren...aber da gab es ein Problem...siehe unten.

    Man kann ja, um einen Insert durchzuführen auch Klassen anlegen...siehe hier:
    weblogs.asp.net/scottgu/archiv…pdating-our-database.aspx (Insert and Delete - Examples)
    ...und das wäre schön, wenn ich das über den Designer regeln könnte. :D

    Nur, habe ich ein Problem die Verbindung zur Northwind-DB herzustellen. VS zeigt an das keine Verbindung hergestellt werden kann(Remoteverbindung nicht zulässig)...dabei ist im Manager das schon eingestellt. Nun ja, dann muss ich es wohl anders probieren.


    Gruß
    Trigoor

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trigoor“ ()

    Nun ja, Du hast ja Recht. :D

    Aber ich habe es heraus gefunden wie es geht:

    VB.NET-Quellcode

    1. Dim koAusz As New KONTOAUSZUG
    2. With koAusz
    3. .BankNameKontrahent = "Test-Bank"
    4. End With
    5. dataContext.KONTOAUSZUG.InsertOnSubmit(koAusz)
    6. dataContext.SubmitChanges()


    Das ist ja echt supereasy. Also LINQ ist echt supercool. Viel besser als irgendwelche ellenlange Queries usw. Ich muss ja keine extra Klasse anlegen...denn die gibt es ja schon. :thumbsup:
    Du mußt nicht für jeden zugefügten Kontoauszug ein eigenes SubmitChanges aufrufen.
    Es langt, dem User dafür einen Button bereitzustellen, und der submitted dann alle Changes, deswegen heißt das ja auch SubmitChanges.

    übrigens, mittm typisierten Dataset gingedas:

    VB.NET-Quellcode

    1. dim rwKontoAuszug = dts.KontoAuszug.AddKontoAuszugRow("Test-Bank")
    fertig.
    Kein New() aufzurufen, und kein .InsertOnSubmit - das weisses Dataset selbst.
    Ja, stimmt. Du hast vollkommen Recht. SubmitChanges kommt beim Button-Event.
    Und das mit dem DataSet ist wohl auch die beste Lösung. Danke!

    Nur ich habe immer noch das Problem, dass er nur anfängt die Daten auszulesen, wenn ich vorher diesen Datensatz markiert habe(also das kleine schwarze Dreieck ganz links im DataGrid) gedrückt habe. Hmmm..... ?( ?( ?(

    Trigoor schrieb:

    Nur ich habe immer noch das Problem, dass er nur anfängt die Daten auszulesen, wenn ich vorher diesen Datensatz markiert habe(also das kleine schwarze Dreieck ganz links im DataGrid) gedrückt habe. Hmmm..... ?( ?( ?(

    Kannst du bitte nochmal sinnvoll formulieren?

    dass "er" anfängt, Daten auszulesen, wenn du vorher einen Datensatz markiert hast - das ist doch Nonsense.
    Okay, ich versuche es...
    Wenn ich einen Eintrag im Grid editiere und/oder die Checkbox setze und dann auf den Button "übernehmen" klicke passiert nichts. Also das Ereignis leave (bin zu Hause, kann nicht nachschauen, sonst würde ich mal den Quelltext posten) wird nicht ausgeführt. Erst wenn ich irgendeinen Datensatz vorher markiere(die Sache mit dem kleinen Dreieck)...erst dann führt er die gewünschte Aktion beim Button-Event aus.

    Jetzt verständlicher formuliert? Sonst versuche ich es halt nochmal... :D ...und werde mal am Montag mal den Quelltext posten. ^^

    Gute Nacht!
    Trigoor
    achdas.
    also ich vermutemal, du meinst die tatsache, dass Änderungen am aktuellen Datensatz nicht übernommen werden (alle anneren DS aber schon).

    Grund ist:
    Databinding schreibt nicht jeden pups in die DataTable, sondern wartet, bis ein Datensatz fertig-editiert ist (sind ja mehrere Properties). Alternativ kann ein Editiervorgang auch gecancelt werden.
    Beim aktuellen Datensatz kannes nicht erkennen, ob übernommen oder gecancelt werden soll, und geht sicherheitshalber von gecancelt aus.
    Man kann alle Editier-Vorgänge als "zu übernehmen" kennzeichnen, indem man myForm.Validate() aufruft. Und danach speichern.
    Hallo ErfinderDesRades,

    Nun ja, die Änderungen werden schon übernommen. Auch wenn mehrere Datensätze bearbeitet wurden(und die Checkboxen aktiviert sind). Also die DataTable wird richtig gefüllt. So wie es sein soll. Nur, wenn ich ich was editiere(und eine Checkbox anhake) und dann auf den Button "Übernehmen" drücke, passiert gar nichts.

    Erst wenn ich den Datensatz markiere(also ich meine damit, dass kleine Dreieck ganz links neben einem Datensatz), und dann auf den Button klicke, passiert die gewünschte Aktion.

    Vielleicht habe ich mich ein bisschen blöde ausgedrückt. Ich habe die ganze Zeit Datensatz gesagt. Gemeint habe ich natürlich die selektierte Row des Grids.

    So, ist schon spät...werde wohl demnächst bald :sleeping: :sleeping: :sleeping:

    Gruß
    Trigoor

    EDIT: Das mit dem myForm.Validate() werde ich trotzdem mal ausprobieren. Vielleicht liegt es ja daran...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trigoor“ ()

    Also irgendwie finde ich das sehr seltsam. Jetzt klappt es ohne vorheriges selektieren. Lag wohl an der Methode selber. Habe es im leave-Ereignis des Grids und im Button-Ereignis getestet und es klappt.

    Versteh einer die Welt.. ?(

    Und ich hatte es vorher bestimmt 20x getestet und es klappte nicht. ?(

    Deswegen werde ich den Thread hier closen und auf erledigt setzen.