Page 1 of 1

Bild im ppsGrid (Zelle) anzeigen - VB.NET

Posted: 30.09.2012, 19:12
by BeS
Hallo Thorsten, Hallo Forum

Bin neu hier im Forum und möchte erstmal alle herzlichst begrüßen.
Ich arbeite mich zur Zeit in das ppsGrid ein. Das klappt auch schon sehr gut, da es in weiten Bereichen logisch und verständlich funktioniert.
Da ich in VB.NET programmiere muss ich den C#-Code der Hilfedatei übersetzen.
Deshalb bin ich mir nicht immer sicher, ob ich hier alles richtig gemacht habe.

Meine Frage:
Ich möchte ein Bild im Grid anzeigen. Dazu habe ich das C#-Beispiel aus der Hilfe 1:1 übersetzt.
Die For Each -Schleife funktioniert, da Spalten und Zeilen korrekt angelegt werden.
-> jedoch bleiben die Zellen leer.
Anbei mein VB-Code. Was ist hier falsch?


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim col As ppsGrid.GridCol
Dim row As ppsGrid.GridRow
Dim Files() As String = System.IO.Directory.GetFiles("E:\Test\Icons")
Dim img As Image
Dim Pt As Point 'C# -> Point Pt = Grid1.FocusCell
Pt = Grid1.FocusCell

Grid2.Scrollbar = ppsGrid.eScrollbar.Vertical ' // bildlaufleiste vertikal
Grid2.SelectionType = ppsGrid.eSelectionType.None ' // keine Markierungen
Grid2.AddCols(2) ' // zwei Spalten

col = Grid2.Cols(0) ' // links Spalte
col.Width = 24 ' // mit 'feste' Weite
col.AutoNumber = True ' // autom. Nummerierung
col.Fixed = True ' // als Zeilenkopf

col = Grid2.Cols(1) ' // rechte Spalte
col.Width = ppsGrid.eWidthType.Percent ' // autom. Breite
col.WidthPercent = 100 ' // ...über gesamte Breite
col.ImageAlignHorz = ppsGrid.eContentAlign.Center ' // bilder horiz. zentriert
col.ImageAlignVert = ppsGrid.eContentAlign.Center ' // ...vertikal zentriert

For Each nm As String In Files ' // alle Dateien
If nm.EndsWith("jpg") Then ' // ..jpg ?
row = New ppsGrid.GridRow() ' // ....neue zeile erzeugen
Grid2.Rows.Add(row) ' // ....anhängen
row.Height = 64 '// ....Zeilenhöhe
row(1).Image = New Bitmap(nm) ' // ....2.Zelle mit Bild
End If
Next

'################################################
'Weitere 'Versuche', ein Bild in eine Zelle zu bekommen.
'################################################

Grid2.AddCols(10) ' // 10 spalten erzeugen
Grid2.AddRows(20) ' // ...und 20 Zeilen

img = Bitmap.FromFile("E:\Test\Icons\Buch.jpg") ' // Bild laden
Grid2.FocusCell = New Point(4, 4)
Pt = Grid2.FocusCell
Grid2(Pt).Image = New Bitmap(img)

'Kann man ein Bild auch aus anderen Controls ins Grid laden? z.B ImageList, PictureBox, My.Resource
'Der folgende Code funktioniert jeweils nicht
Grid2.Cells(4, 5).Image = img 'Direkt
'oder so?
Grid2.Cells(4, 6).Image = New Bitmap(Me.PictureBox1.Image) 'Mittels PictureBox
'oder so?
Grid2.Cells(4, 7).Image = Me.ImageList1.Images(1) 'Mittels ImageList
'oder so?
Grid2.Cells(4, 9).Image = My.Resources.TestBild1 'Mittels Resourcendatei

'Dies funktioniert. Bild als BackgroundImage wird angezeigt. (Also wird 'img' korrekt geladen.)
Grid2.BackgroundImage = img
Grid2.BackgroundImageLayout = ppsGrid.eImageLayout.Stretch
End Sub

Re: Bild im ppsGrid (Zelle) anzeigen - VB.NET

Posted: 01.10.2012, 10:33
by torsten
Hallo Bertram
Versuch es erstmal ganz einfach:

Code: Select all

  'grid mit einer Spalte und einer Zeile
  grid.AddCol(1)
  grid.AddRow(1)

  'Bild laden und anzeigen
  grid.Cells(0,0).Image = New Bitmap("E:\Test\Icons\Buch.jpg")
Das sollte das Bild in der Zelle (0,0) anzeigen

Die "foreach"-Schleife im Demo-Code liest alle Dateien eines Verzeichnisses aus,
filtert alle ".jpg" Dateien, erzeugt jewels eine neue Zeile und setzt die "Image"-Eigenschaft
der jeweils zweiten Zelle auf das geladene Bild.

So aus dem Stehgreif sehe ich bei dem Code keine Fehler....

Code: Select all

Dim col As ppsGrid.GridCol
Dim row As ppsGrid.GridRow
Dim Files() As String = System.IO.Directory.GetFiles("E:\Test\Icons")
Dim img As Image
Dim Pt As Point 'C# -> Point Pt = Grid1.FocusCell
Pt = Grid1.FocusCell

Grid2.Scrollbar = ppsGrid.eScrollbar.Vertical ' // bildlaufleiste vertikal
Grid2.SelectionType = ppsGrid.eSelectionType.None ' // keine Markierungen
Grid2.AddCols(2) ' // zwei Spalten

col = Grid2.Cols(0) ' // links Spalte
col.Width = 24 ' // mit 'feste' Weite
col.AutoNumber = True ' // autom. Nummerierung
col.Fixed = True ' // als Zeilenkopf

col = Grid2.Cols(1) ' // rechte Spalte
col.Width = ppsGrid.eWidthType.Percent ' // autom. Breite
col.WidthPercent = 100 ' // ...über gesamte Breite
col.ImageAlignHorz = ppsGrid.eContentAlign.Center ' // bilder horiz. zentriert
col.ImageAlignVert = ppsGrid.eContentAlign.Center ' // ...vertikal zentriert

For Each nm As String In Files ' // alle Dateien
  If nm.EndsWith("jpg") Then ' // ..jpg ?
    row = New ppsGrid.GridRow() ' // ....neue zeile erzeugen
    Grid2.Rows.Add(row) ' // ....anhängen
    row.Height = 64 '// ....Zeilenhöhe
    row(1).Image = New Bitmap(nm) ' // ....2.Zelle mit Bild
  End If
Next
Wenn es weiter Probleme gibt, muß ich mein Windows/VS rauskramen...
dauert dann aber etwas... ( :-), dann bitte nochmal melden)
Gruß Torsten

PS.: Wofür ist die Variable "pt"??

Re: Bild im ppsGrid (Zelle) anzeigen - VB.NET

Posted: 01.10.2012, 21:52
by BeS
[quote="torsten"]Hallo Bertram
Versuch es erstmal ganz einfach:

Code: Select all

  'grid mit einer Spalte und einer Zeile
  grid.AddCol(1)
  grid.AddRow(1)

  'Bild laden und anzeigen
  grid.Cells(0,0).Image = New Bitmap("E:\Test\Icons\Buch.jpg")
Das sollte das Bild in der Zelle (0,0) anzeigen

Hallo Torsten.
Habe auch hier in einem neuen Projekt/Grid getestet.
Das Grid bleibt leider leer. :?

Auch ein 'Zeilenbild' anzeigen geht nicht.
row(1).Image = New Bitmap("E:\Test\Icons\Buch.jpg)

Da müsstest du bitte noch mal schauen, woran das liegt.

Dazu habe ich noch eine generelle Frage:
Geht das? Ein Bild und Text gleichzeitig in einer Zelle?

Vielen Dank für deine Mühe.
Gruß Bertram

Re: Bild im ppsGrid (Zelle) anzeigen - VB.NET

Posted: 02.10.2012, 12:02
by torsten
Hallo Bertram
Hab' den Fehler gefunden: Er war im Zusammenhang mit der
Sortierrichtungsanzeige (was für ein Wort :-)).
Bilder und Sortierrichtungsanzeigen schließen sich aus, eines zur Zeit geht nur
Auch ein 'Zeilenbild' anzeigen geht nicht.
row(1).Image = New Bitmap("E:\Test\Icons\Buch.jpg)
Der Ausdruck "row(1) ist mitnichten ein "Zeilenobject", sondern die zweite Zelle im Zeilenobject

Code: Select all

  row= grid.Rows[123];        // 124. Zeile
  row[0].Value= 5;            // erste Zelle, Zugriff auf Value-Eigenschaft
  col= grid.Cols[8];          // neunte Spalte
  col[0].Value= 6;            // oberste Zelle

  // der Ausdruck grid.Rows[123][0] müsste funzen, hab's noch nie probiert
  // einfacher ist grid[0, 123]  oder grid.cells[0,123]
Geht das? Ein Bild und Text gleichzeitig in einer Zelle?
Ja, das geht.
Du musst dafür sorgen, das sich beides nicht überlappt. Also zBsp. Bild oben, Text unten oä.
Gruß Torsten

PS.: Aktuelle Version: 1.3.8.6, download unter http://www.ppsGrid.de/download/ppsGrid.dll

Re: Bild im ppsGrid (Zelle) anzeigen - VB.NET

Posted: 02.10.2012, 18:41
by BeS
Hallo Torsten

Es geht !! :D
Die Bilder werden angezeigt. Damit habe ich alles was ich brauche.
Vielen Dank für den Super Service und deine Hilfe.

An dieser Stelle muss ich nochmal etwas loswerden.
Ich muss/will in der Firma die alten VB6-Progs umstellen auf .NET
Hier sind große Tabellen im Einsatz mit 200 Spalten und 100-200 Zeilen.
Logischer Weise fängt man mit dem DataGridView an die Aufgabe umzusetzen.

Das hat auch gut funktioniert. Trotz Datenbindung erfolgte aber das Laden gemächlich. Man konnte zusehen wie das Grid aufgebaut wurde. Die Ladezeit des formatierten DataGridView war dann schlicht unmöglich und für mich nicht zu gebrauchen.
Wer wartet denn schon zig mal am Tag 5 sek. bis das Teil geladen ist. Beim Scrollen der fertigen Tabellen
wurde alles verzerrt und mit Verzögerung (wie Gummi) ausgeführt.

Das ppsGrid vom Torsten verhält sich da ganz anders. Alles flutsch. Die großen Tabellen liegen in nicht mal einer Sekunde fertig formatiert auf dem Bildschirm. Dazu brauchte ich gerade mal einen Bruchteil der Einarbeitungszeit zum DataGridView, um brauchbare Ergebnisse zu erziehlen. zudem ist die Bedienung logisch und einfach zu erlernen.
Für meinen Bedarf ist das ppsGrid ein Super Programm und nur zu empfehlen :-)

Gruß Bertram