In Linq erzeugte Spalte Bild einfügen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von diylab.

    In Linq erzeugte Spalte Bild einfügen

    Ahoi Leute,

    ich habe ein Problem, und zwar möchte ich in ein DGV welches ich per Linq und BindingSource fülle eine Spalte mit einem Icon einfügen.

    Code ist:

    VB.NET-Quellcode

    1. Dim treeIcon As New Icon("D:\pctNextIT.ico")
    2. Dim perspectives = DsBSC.tblPerspective.AsEnumerable
    3. Dim kennzahlen = DsBSC.tblKennzahl.AsEnumerable
    4. Dim berechnungskennzahlen = DsBSC.tblBerechnungskennzahl.AsEnumerable
    5. Dim kennzahlBerechnungskennzahl = DsBSC.tblKennzahlBerechnungskennzahl.AsEnumerable
    6. Dim istwerte = DsBSC.tblBKIst.AsEnumerable
    7. Dim joinedResults4 = From i In istwerte _
    8. Where i.fldBBKennzahlNo = testwert And i.fldBKMonth >= von And i.fldBKMonth <= bis _
    9. Select textspalte = If(i.fldBKActual > 2500, treeIcon, "NEIN"), i.fldBKYear, i.fldBKMonth, i.fldBKActual
    10. bs1.DataSource = joinedResults4
    11. DataGridView2.DataSource = bs1


    Die Spalte wird erzeugt, jedoch anstatt Bild kommt nur "Image TExt blablal"

    Wie bekomme ich dies hin, das ein icon angezeigt wird?

    shaebich schrieb:

    Die Spalte wird erzeugt


    Die Spalte muss schon vorher im DataSet erzeugt sein, als "System.Byte()" (Unbedingt als Array!!). Und jetzt:

    VB.NET-Quellcode

    1. Dim a = Bitmap.FromFile("D:\pctNextIT.ico")
    2. Dim MS As New IO.MemoryStream
    3. a.Save(MS, Drawing.Imaging.ImageFormat.Jpeg)
    4. MS.Flush()
    5. DataSet1.Perspektive.AddPerspektiveRow(Nothing, MS.ToArray)


    MS.ToArray ist jetzt dein Byte-Array, das du für die Spalte übergibst.

    Ich habe jetzt einfach in Perspektive-Tabelle eine Spalte erzeugt, die den Typ "System.Byte()" hat. DGV erzeugt automatisch die Image-Spalte.

    Habe jetzt für dich zusammengegoogelt :)

    ErfinderDesRades schrieb:

    ich kann mir kaum vorstellen, dass das hier kompiliert:

    Quellcode

    1. Dim joinedResults4 = From i In istwerte _
    2. Where i.fldBBKennzahlNo = testwert And i.fldBKMonth >= von And i.fldBKMonth <= bis _
    3. Select textspalte = If(i.fldBKActual > 2500, treeIcon, "NEIN"), i.fldBKYear, i.fldBKMonth, i.fldBKActual


    Doch kompiliert UND zeigt mir sogar mein dgv dannach an ;)
    Bloß anstatt dem Symbol steht in der Spalte "(Symbol)" :D

    sonne75 schrieb:

    Die Spalte muss schon vorher im DataSet erzeugt sein, als "System.Byte()" (Unbedingt als Array!!). Und jetzt:

    In meinen DataTables benutze ich regelmäßig Bilder/Icons und nehme als DatenTyp: dtAllFiles.Columns.Add("fIcon", typeof(Icon)); // Icon .
    Oder auch Image - was man halt braucht.

    Warum ByteArray ?
    @diylab
    Weil es im Designer keine Image- oder Icon-Spaltentypen gibt. Ich habe gegoogelt und bin auf einen Beitrag von @ErfinderDesRades gestoßen, der erklärt, dass man die Bilder im DataSet als ByteArray speichern kann und DGV dann automatisch eine ImageColumn dafür erstellt (tut er auch). Dann habe ich nur gegoogelt, wie man Image in ByteArray umwandelt...

    sonne75 schrieb:

    Wie machst du dann ein Datenmodell mit Relationen usw? Ich habe bei mir über 20 Tabellen, sowas behält man doch nicht dauernd im Kopf...

    Unser aktuelles Projekt hat 298 Tabellen, 264 stored procedures und 35 Views.
    Fast alles passiert in der DB, das Frontend ist umfangreich in den Sichten, trotzdem aber dumm im Ganzen :) .
    Wir Designen mit Navicat.

    @shaebich
    Die Spalte wird erzeugt, jedoch anstatt Bild kommt nur "Image TExt blablal". Wie bekomme ich dies hin, das ein icon angezeigt wird?

    Du könntest das automatische Generieren der Spalten vor der Bindung ausschalten DataGridView.AutoGenerateColumns = false;, Deine Spalten selbst eintragen und den Typ festlegen (z.B. für die Icon-Spalte: ColumnType DataGridViewImageColumn) und dann die Felder deiner DataTable (oder Liste oder was auch immer) per DataPropertyName an das GridView binden. In meinem Fall wäre dann z.B. das erste Feld ein Icon: dgvFiles.Columns[0].DataPropertyName = "fIcon";

    LG,
    Bruno

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „diylab“ ()