DGV Image to panel

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von toto.

    DGV Image to panel

    Edit by ErfinderDesRades: (Thema verschoben) Bitte richtiges UnterForum wählen!


    Hallo brauche kurz Hilfe,

    ich habe ein DGV mit 7 Spalten und im Spalte 7 ist ein Bild
    den ich ein Panel übergeben möchte,

    VB.NET-Quellcode

    1. Panel1.BackgroundImage = DGV3.SelectedRows.Item(7)


    so klappt nicht, ich bitte um ein wenig Unterstützng

    Danke

    @Erfinder falls unterwegs bist, es geht um die Datanbank, es klappt super,
    DataSet gefüllt mit Daten (Akkorden) und brauche dringend diese Übergabe.
    lg toto

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

    Sorry für Gestern, musste aber weg.

    also die Spalte hat Datentyp: Byte,
    nebenbei habe mit hilfe einer Funktion das Bild im Panel hinbekommen:

    VB.NET-Quellcode

    1. Panel3.BackgroundImage = GetDataToImage(DirectCast(DGV3.CurrentRow.Cells(7).Value, Byte()))
    2. End Sub
    3. Public Function GetDataToImage(ByVal pData As Byte()) As Image
    4. Try
    5. Dim imgConverter As New ImageConverter()
    6. Return TryCast(imgConverter.ConvertFrom(pData), Image)
    7. Catch ex As Exception
    8. MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    9. Return Nothing
    10. End Try
    11. End Function


    aber nur das Bild der erste markierte zelle,
    ich würde aber gerne in der Spalte(7) das Bild auswählen zu können.
    lg toto
    Byte? Und was ist da drin? Die Datei in binärer Form? Die Pixel aus dem Bild?
    Hallo und danke für deine Antwort,

    in der Tabelle sind 7 DataColumn,
    6 davon sind: DataType System.String, (für werte)
    1 davon ist: DataType System.Byte() (für Bild)

    ich habe in der xml rein geschaut, sagt mir nichts, da ist ,fürs Bild, eine lange Reihe an werten die ich nicht entziffern kann.

    ich würde aber gerne in der Spalte(7) das Bild auswählen zu können.

    ich meinte das DGV über ein button Zeiel für Zeile scrollen zu können.
    habe mit diesem Code probiert bleibt aber immer in der erste zeile stehen:

    VB.NET-Quellcode

    1. Dim i As Int16 = 32 ' this needs to be form level
    2. If i < DGV3.Rows.Count - 1 Then 'stay within bounds
    3. i = i + 1 ' for all rows except Row0
    4. DGV3.Rows(i - 1).DefaultCellStyle.BackColor = Color.White ' restore previous highlight
    5. DGV3.Rows(i).DefaultCellStyle.BackColor = Color.LightSteelBlue 'new highlight
    6. DGV3.CurrentCell = DGV3.Rows(i).Cells(0) ' Set the current cell to the cell in column 1, Row 0.
    7. Else 'next row is off the bottom so
    8. i = 0 'reset index
    9. DGV3.Rows(DGV3.Rows.Count - 1).DefaultCellStyle.BackColor = Color.White 'restore bottom row
    10. DGV3.Rows(i).DefaultCellStyle.BackColor = Color.LightSteelBlue 'highlight top row
    11. DGV3.CurrentCell = DGV3.Rows(i).Cells(0) ' Set the current cell to the cell in column 1, Row 0.
    12. End If
    lg toto

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

    Warum arbeitest Du nicht mit Deinem DataSet. Es ist doch egal, wie die Bytes darin codiert sind. Darum kümmert sich die DataSet-Klasse von selbst. Scheinbar hast Du das Prinzip nicht ganz verinnerlicht. Arbeite nur gegen das DataSet, bzw. die BindingSource, nie gegen das DGV. Nicht umsonst nennt es sich typ. DataSet, damit Du jederzeit sicher sein kannst, den richtigen Datentyp zu haben.

    Ich finde es nicht elegant, die Bilder als Byte() in dem DataSet zu speichern, weil Du hier die Möglichkeit verschenkst, diese Bilder an Steuerelemente zu binden. Anstatt die Daten so abzuspeichern, speichere nur den Pfad und verschiebe die Bilder in ein extra Verzeichnis. So bleibt auch Deine XML-Datei klein und übersichtlich. Den Pfad kannst Du z. B. an eine PictureBox binden (ImageLocation).
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hallo SpaceyX,
    Stimmt, bin neu in Dataset,
    habe zuerst die Bilder auch woanders gespeichert, dann dachte ich mir es ist besser alles beinander zu haben.
    Weil dem Dataset ist es egal ob die Benennungen gleich sind oder nicht.
    Bsp.:
    Frequenz-1...Bild1
    Frequenz-1...Bild2
    In ein extra Verzeichniss muss dann so sein:
    Frequenz-1-1...Bild1
    Frequenz-1-2...Bild2
    sonst wird der erste überschrieben.

    Werde mir dann was überlegen und sie wieder woanders lagern.
    Das macht mir die Sache wieder leichter.

    Kann ich dann im DGV an jeder beliebiger Stelle anckicken und mir die Werte plus Bild anzeigen zu lassen?
    lg toto

    toto schrieb:

    also die Spalte hat Datentyp: Byte,
    Dassis durchaus wichtig.
    Leider ists auch falsch.
    Aber die richtige Antwort ist immerhin erkennbar, nämlich das Image ist in einer Byte() - Spalte persistiert.
    Unterschied von Byte und Byte() ist dir bekannt?

    Jedenfalls deine Images sind direkt inne DataTable, sie könnten ja auch als Dateipfad (String) verwaltet werden.

    So jedenfall brauchst du nur die BackgroundImage-Property eines Panels an diese Spalte zu binden.
    In etwa wie im Film auf PictureViewer gezeigt.

    Aber aufpassen: Nicht die ImageLocation (panel hat solch auch nicht), sondern die BackgroundImage-Property - findet man im Databindings-Erweitert - Knoten im Designer.
    BUUAAA!!! Endlich ein Antwort. :thumbsup:

    Unterschied von Byte und Byte() ist dir bekannt?

    Ja!

    Jedenfalls deine Images sind direkt inne DataTable, sie könnten ja auch als Dateipfad (String) verwaltet werden.

    Hab schon

    Werde mir den PictureViewer anschauen. Dann melde mich wieder.

    Gibt es eine möglichkeit, wegen der Übersicht, die Daten in Dataset waagerecht zu bekommen?
    lg toto

    toto schrieb:

    BUUAAA!!! Endlich ein Antwort. :thumbsup:
    jo - musst dich nur bequemen, vb1963s Nachfrage nach notwendigen Zusatzinfos zu beantworten - dann kann man dir zielführend antworten.


    Gibt es eine möglichkeit, wegen der Übersicht, die Daten in Dataset waagerecht zu bekommen?
    was sind waagerechte Daten ?(
    Ich vermute, du willst im DGV Zeilen und Spalten vertauschen, sodass das DGV weitere Datensätze immer rechts anfügt, statt unten.
    Nö - da gibts nix, ich glaub nichtmal in Wpf :(
    vergiss die xml, war ein falscher gedanke von mir.

    Aber aufpassen: Nicht die ImageLocation (panel hat solch auch nicht), sondern die BackgroundImage-Property - findet man im Databindings-Erweitert - Knoten im Designer.

    Bindung statt gefunden.

    bin dabei den pictureViewer umzusetzen.
    lg toto