DataGridview mit SQL befüllt, wie Row auf eigene Klasse casten?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DataGridview mit SQL befüllt, wie Row auf eigene Klasse casten?

    Hi,

    ich habe ein dgv per .Datasource / SQL befüllt. Nun möchte ich einige Einträge auf instanzen einer eigenen Klasse casten.

    Quellcode

    1. For Each Row As DataGridViewRow In Dgv.Rows
    2. Dim myClass As New clsMyClass
    3. MyClass = DirectCast(Row.DataBoundItem, clsMyClass)
    4. Next


    Die Datenstruktur in meiner Klasse entspricht genau den Spalten,des dgv.

    Fehler: "Das Objekt des Typs "System.Data.DataRowView" kann nicht in Typ "MyApp.clsMyClass" umgewandelt werden."

    Hat jemand einen Tip für mich?

    Danke

    John
    Es wär besser, du würdest dich an BindingSources gewöhnen. Und daran, ganze Methoden zu posten. Da ginge das in etwa so:

    VB.NET-Quellcode

    1. Private Sub AMethod()
    2. For Each drv In clsMyClassBindingSource
    3. Dim MyClass = DirectCast(DirectCast(drv, DataRowView).Row, clsMyClass)
    4. Next
    5. End Sub
    Auch deine Benamung scheint mir stark verbesserungsfähig.
    Alle Lehrbücher reden von selbsterklärendem Code, aber alle Programmierer geben ihren Klassen und Variablen immer solche Namen, dass ganz bestimmt niemand drauf kommen kann, worum es geht.

    Was auch gut wäre, du würdest für vb.net-Code den vb.net-Button nehmen. Der macht deine Listings auch so schön bunt wie meine. ist leserlicher.
    dazu isser nämlich da.
    Grundsätzlich MyClass = DirectCast(DirectCast(Row.DataBoundItem, DataRowView).Row, clsMyClass)
    Aber kann es sein, dass Du eine BindingSource hast, woran das DGV gebunden ist?
    Und: Warum willst Du überhaupt Daten aus dem DGV rauszerren, wenn Du zweifellos eine DataTable hast, dessen Inhalt im DGV angezeigt wird, und schon alles als korrekten Typ enthält?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Vielen Dank erstmal für Eure Hilfe.

    Der Code oben war natürlich abstrahiert, meine Klassen heißen anders.

    Ich lasse zur Laufzeit eine DataGridView mit Daten füllen, die per SQL abgefragt wurden.

    Zur weiteren Verarbeitung möchte ich reagieren, wenn der User Rows im DataGridView auswählt. Dazu muß ich die Daten irgendwie in meine eigene Klasse bekommen. Bleibt da etwas anderess übrig, als so zu Casten?
    Die Info, welche Datensätze ausgewählt sind, ist doch nur im Dgv verfügbar, oder?

    John

    John422 schrieb:

    Die Info, welche Datensätze ausgewählt sind, ist doch nur im Dgv verfügbar, oder?
    Eine Mehrfach-Auswahl muss man tatsächlich aus dem DGV auspuhlen.
    Die selectedRow hingegen gibts nur einmal, und die bezieht man besser aus der BindingSource (wie gezeigt).



    Achso ich zeige ja was anderes - weil auch du was anderes vorgegeben hast:
    Du willst ja alle im DGV angezeigten Datensätze bearbeiten.
    Aber wie gesagt und gezeigt: Sowas macht man besser aus der BindingSource - nicht aussm Grid.

    John422 schrieb:

    Der Code oben war natürlich abstrahiert, meine Klassen heißen anders.
    Sone Abstrahiererei machts nur dir und uns unnötig schwer.
    Je genauer man weiss, was wirklich gecodet ist, desto besser kann man helfen.
    Abstraktionen erschweren nur den Durchblick, und meist sind zusätzliche Fehler noch eingebaut - man schlägt sich also mit Gespenstern herum.

    Bitte poste wirklichen Code, dann kann dir wirklich geholfen werden.