TableAdapter-Methoden Generiert keine Update Methode

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Bernd.

    TableAdapter-Methoden Generiert keine Update Methode

    Morjen,

    wenn ich im TableAdapter Manager mehrere Tabellen reinbastel und diese verbinde, generiert der TableAdapter Manager keine Update Methode. Erstmal Logisch.

    Ich wollte in eine und der selben Form,
    - eine DataGridView zur Ansicht, aber schon fertig zusammengestellt. Dafür ist das Ding ja da.
    - eine Detail Ansicht in der die Daten geändert werden können. Ohne die fertig abgefragten Felder aus der Abfrage.

    Da er aber keine Update Methode generiert, kann ich leider nicht Speichern.

    Hintergrud:
    die Ansicht in einer DataGridView mit den schebbigen ComboBoxen gefällt mir halt nicht.

    So nun die Fragen:
    kann ich eine Update Methode selber Generieren ? Und wenn, wie ?

    Ich wollte schon mit ein und dem selben DataSet und TableAdapter arbeiten.

    danke
    Bernd

    Bernd schrieb:

    die Ansicht in einer DataGridView mit den schebbigen ComboBoxen gefällt mir halt nicht.

    wennde bei die schäbigen ComboboxColumns DisplayStyle.Nothing setzt, verschwindet der Dropdown-Pfeil, und sie ist optisch nicht von einer normalen Column zu unterscheiden.
    Verwende ich sogar üblicherweise so, denn Combo-Columns braucht man überwiegend ReadOnly.
    Aber abgesehen davon, dass man den Style der ComboBoxColumn ändern kann, benötigst du doch keine weitere Update Methode für eine Detailansicht. Die Update-Methode bezieht sich doch auf das DS bzw. die DT.
    Ich benutze auch eine Ansicht per DGV und eine Detailsansicht mit Textboxen und Comboboxen. Liegt bei mir daran, das ich im DGV nicht horizontal scrollen möchte und mir nur die wichtigsten Spalten dort anzeigen lasse.
    Die Detailsansicht ist direkt mit an die Bindingsource gebunden und zeigt mir somit immer den Datensatz an, der auch im DGV ausgewählt ist.

    Zum Speichern gibt es bei mir nur einen MEnüpunkt --> Speichern. Dort werden alle Tabellen zusammen abgespeichert. Wenn du jede Tabelle schon auf das DGV gezogen hattest, dann sollte auch für jede Tabelle eine UPDATE-Mrthode erstellt worden sein.
    Man muss nur daran denken, dass man vor dem Apspeichern mit

    VB.NET-Quellcode

    1. TableAdapterManager.UpdateAll(DS)


    auch allen BindingSources ein .EndEdit gibt

    VB.NET-Quellcode

    1. Tabelle1BindingSource.EndEdit()


    damit die Änderungen registriert werden.

    Gruß
    HerrFrie
    Hmm, verstehe ich nicht.

    Wenn ich bei mir eine Tabelle_Mitglieder aufs Form ziehe, entsteht ein DGV mit BN. Dort habe ich dann auch ein TableAdapterManager. Ziehe ich jetzt eine weitere Tabelle in das DGV rein, z.B. Tabelle_Wohnort (hat eine Relation zu Tabelle_Mitglieder durch eine ID) wird dies auch im TabelAdapterManager eingefügt. Oder machst du das ohne Designer ?

    Tabelle_Wohnort kann ich in einer Detailansicht so einstellen, dass diese immer den aktuellen Wohnort des Mitglieds anzeigt. Wenn ich anstelle der Textbox eine Combobox nehme kann ich zusätzlich die anderen Wohnorte aus der Tabelle_Wohnorte auswählen und in der Tabelle_Mitglieder wird die richtige ID dafür eingetragen.
    Funktioniert im Grunde genauso, wie der Erfinder das im DGV mit einer ComboBoxColumn beschrieben hat.

    Ich muss allerdings sagen, dass ich auch erst ein bisschen mit dem Designer fummeln musste, bis ich es verstanden habe, alles richtig einzustellen. Im Prinziep muss du auch nicht die Textboxen/Comboboxen aus der DB rüber ziehen, sondern kannst auch normale Controls aus den Tools benutzen.

    Gruß
    HerrFrie

    Wenn ich so die Tabellen verknüpfe. Dann baut er garkein Update ein.

    Wenn ich ich das direkt im DataSet mache, also die Verbindungen, klar dann gehts.

    Ich wollte der Blöden Ansicht der ComboBoxen aus dem Weg gehen.

    Jetzt mache ich es wie du Beschrieben hast. Nehme jedoch die Ansicht wie EDR empfohlen hat.
    Dann habe ich alles was ich benötige.
    Also die Passende Ansicht und auch mein Update Kommando

    vielen dank
    Bernd
    Ich finde diese typisierten TableAdapter ja ziemlich vermurkst - da haben sies IMO mitte Kapselung bisserl übertrieben, dass man da nicht auf das Update-Command zugreifen kann.

    Aber du kannst spasseshalber mal im Dataset-DesignerCode die Methode "InitAdapter()" aufsuchen, um zu gucken, wie man ein UpdateCommand korrekt konfigurieren könnte.

    Vermutlich verdirbt dir das ziemlich das Interesse an sowas - bei mir wars jdfs. so.

    (Das ist natürlich echt schlimmer Designer-Code, und ein menschliches Gehirn kann sich eine wesentlich einfachere Methode ausdenken, v.a. mithilfe der CommandBuilder-Klasse.
    Aber auch eine händisch gecodete Konfiguration wäre nur einfacher, aber bei weitem nicht einfach.)
    Da hat irgend ein Idiot mehr als 10.000 Zeilen in meinen Code rein geschrieben.
    Wann hat der denn das gemacht ?
    Habe ich garnichts von mitbekommen.


    He Spaß beiseite.

    Da lasse ich vorerst mal die Finger von.

    Aber gut zu wissen, das es das gibt und wo es das gibt.
    Da steht ne Menge plunder drin, den man echt brauchen kann.

    Sehr Empfehlenswert.

    Danke wie Immer

    Bernd

    Bernd schrieb:

    Da hat irgend ein Idiot mehr als 10.000 Zeilen in meinen Code rein geschrieben.
    Ich wars nicht ;)


    Designer-Code-Dateien kann man auch öffnen, indem man im ProjektExplorer auf "alle Dateien anzeigen" klickst.

    Normalerweise wird Designer-Code ja verborgen, dass man nicht drin rumfummelt, aber mit gucken macht man nix kaputt.
    So aber nochmals zurück zu meinem Ursprünglichen Problem.

    Die Vorschläge funktionieren natürlich. Bringen mich aber leider nicht ans Ziel.
    Dadurch das ich im KassenBuch nur Adress ID habe, kann ich später nicht

    - den User nach Vorname bzw Nachname Filtern lassen
    - die DGV in der Ansicht sortieren lassen.

    Logisch
    drücke ich auf DGV Header Vorname, sollte er ja auch nach Vorname sortieren
    das gleiche gilt für den Nachnamen.
    Da aber nur eine ID in der Spalte steht, sortiert er mir Natürlich nach "Integer" und nicht nach "String".

    Das gleiche Problem käme ja, wenn ich dem User Filter Text Boxen einbaue.
    Und genau das habe ich vor.

    Such der Kassenwart nach Bernd, sollen ja alle Datensätze von Bernd erscheinen.
    Oder Vorname "Ber" Nachname "Meier"
    dann sollen alle Meier die auch noch mit Ber anfangen gelistet werden.

    mhhhh, mit ID ist das schwer.
    Dann müsste ich ... ?

    Was tun ?

    danke

    bis heute abend
    Oh - statt readonly Combocolumns kann man auch berechnete Spalten zufügen, die einen Wert der ParentTable anzeigen. Die sind auch readonly, und wären im Falle Name, Vorname vom Typ string, würden daher korrekt sortieren.

    Die genaue DataExpression kann ich dir aber nicht vorsagen, dazu müsste ich die TabellenNamen, SpaltenNamen und den Namen der DataRelation kennen.

    Oder - was ich einfacher fände - du baust einen Parent-Child-View. Da suchst du Bernd in der ParentTable, und bekommst in der ChildTable seine Kassen-Bewegungen, oder was da halt drinne ist.

    ErfinderDesRades schrieb:

    Oder - was ich einfacher fände - du baust einen Parent-Child-View

    Ich habe leider schon eine andere Parent.

    Aber das ist dann auch erstmal zweitrangig.
    Ich habe einige Versuche gemacht.
    Ich lasse meine Parent einfach so wie sie ist. Bleibt also alles beim alten.
    Erstelle ich einen neuen Eintrag in der Child, wird die ID der Parent übernommen. Super, so soll es sein.

    Nun kann ich weitere Parent erstellen und dies genau wie die erste Parent an das Child binden.
    Die ID's werden dann nicht übernommen, schei... egal. Kann ich ja Manuell Proggen.

    Was aber dann geht, ist genau das was du sagst.
    Ich erstelle Berechnete Spalten (Expression) und lasse die mit in der DGV anzeigen. (Obwohl ja nichts berechnet wird)

    Und schon habe ich alles was ich brauche.
    - die DGV zeigt Klartext (also String) an
    - die ID der ersten Parent wird übernommen
    - Filter einbauen, kein Problem
    - Speichern bleibt dann auch erhalten.

    Arbeit die dann noch für mich bleibt.
    - ID der anderen Parent's einsammeln und bei eine ADD.NewDataRow einbauen.
    und das hält sich ja in grenzen.

    So langsam fängt es an Spaß zu machen.
    Bin ich froh das ich, als ich mit DatenBanken anfing, auf dich gehört habe.

    Vielen lieben dank
    Bernd