Caricare img da database sql server 2008 in datagridview

mercoledì 04 marzo 2015 - 21.57
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  .NET 3.0  |  Windows XP  |  SQL Server 2008 R2

basicdany Profilo | Expert

ciao, a tutti, devo visualizzare in un datagridview un campo img da un database sql server 2008, attualmente visualizzo i dati cosi;

Dim imgColVisualizza As New DataGridViewImageColumn
Dim imgColElimina As New DataGridViewImageColumn
Dim imgColModifica As New DataGridViewImageColumn
Dim imgColIncrocio As New DataGridViewImageColumn


With DataGridImmobili

.DefaultCellStyle.WrapMode = DataGridViewTriState.True 'per autosize
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders 'per autosize
.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
.CellBorderStyle = DataGridViewCellBorderStyle.Single
.GridColor = Color.Blue
.RowHeadersVisible = False
.ReadOnly = True

.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False

imgColVisualizza.Name = "V"
imgColVisualizza.Width = 20
imgColVisualizza.Image = Image.FromFile(Application.StartupPath & "\showDetail.gif")
imgColVisualizza.DisplayIndex = 0
.Columns.Add(imgColVisualizza)

.Columns("ID").Width = 35 '55
.Columns("ID").HeaderText = "Cod." 'modificare testa

.Columns("DataInsert").Width = 70
.Columns("DataInsert").HeaderText = "Data" 'modificare testa

.Columns("TipoImmobile").Width = 105
.Columns("TipoImmobile").HeaderText = "Tipologia" 'modificare testa

.Columns("Denominazione").Width = 60 '45
.Columns("Denominazione").HeaderText = "Città" 'modificare testa

.Columns("Zona").Width = 85
.Columns("Zona").HeaderText = "Zona" 'modificare testa

.Columns("IndRiservato").Width = 110
.Columns("IndRiservato").HeaderText = "Indirizzo" 'modificare testa

.Columns("istrattativa").Width = 0
.Columns("istrattativa").HeaderText = "istrattativa" 'modificare testa

.Columns("isscaduto").Width = 0
.Columns("isscaduto").HeaderText = "isscaduto" 'modificare testa

.Columns("Datascadenza").Width = 0
.Columns("Datascadenza").HeaderText = "Datascadenza" 'modificare testa


End With

DataGridImmobili.DefaultCellStyle.WrapMode = DataGridViewTriState.True 'per autosize
DataGridImmobili.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells 'per autosize

DataGridImmobili.DefaultCellStyle.BackColor = Color.OldLace

devo visualizzare un campo di tipo img di nome foto!

qualcuno puoi aiutarmi? come farlo

grazie a tutti!

Davide1986 Profilo | Junior Member

Cosi su due piedi mi verrebbe da consigliarti cosi, sfrutta "CellFormatting' , ho fatto le prove e funge fammi sapere se ti va bene.. :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Riscriverei il codice cosi :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Saluti Davide,


Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it

basicdany Profilo | Expert

ciao, grazie, volevo ringraziarti prima di tutto, ma credo di non essermi spiegato bene,
il mio obiettivo e' quello di visualizzare un img presa da campo database di nome foto (stessa tabella dove leggo i dati) impostando io altezza e larghezza della colonna che
conterra' la foto !

riposto il codice che attualmente uso per visualizza i campi di una tabella in un datagridview:

With DataGridImmobili

.DefaultCellStyle.WrapMode = DataGridViewTriState.True 'per autosize
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders 'per autosize
.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
.CellBorderStyle = DataGridViewCellBorderStyle.Single
.GridColor = Color.Blue
.RowHeadersVisible = False
.ReadOnly = True

.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False


.Columns("ID").Width = 35 '55
.Columns("ID").HeaderText = "Cod." 'modificare testa

.Columns("DataInsert").Width = 70
.Columns("DataInsert").HeaderText = "Data"

.Columns("TipoImmobile").Width = 105
.Columns("TipoImmobile").HeaderText = "Tipologia"

.Columns("Denominazione").Width = 60 '45
.Columns("Denominazione").HeaderText = "Città"

.Columns("Zona").Width = 85
.Columns("Zona").HeaderText = "Zona" 'modificare testa

.Columns("IndRiservato").Width = 110
.Columns("IndRiservato").HeaderText = "Indirizzo"

.Columns("istrattativa").Width = 0
.Columns("istrattativa").HeaderText = "istrattativa"

.Columns("isscaduto").Width = 0
.Columns("isscaduto").HeaderText = "isscaduto"

.Columns("Datascadenza").Width = 0
.Columns("Datascadenza").HeaderText = "Datascadenza"


End With


GRAZIE TANTO


Davide1986 Profilo | Junior Member

Con la frase "visualizzare un img presa da campo database di nome foto" , ti riferisci all'attributo/colonna del database che si chiama "foto" e contiene una stringa con il percorso della foto (ex: "c:\Documenti\Immagini\Logo1.png") ?

Saluti Davide,
Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it

basicdany Profilo | Expert

ciao, no il campo e di tipo image, devo visualizzarlo nella griglia.

ciao grazie

Davide1986 Profilo | Junior Member

Ok.. ti posso allegare una funzione che recuperare l'immagine dal Database , recupera una lista delle immagini del database e l'altra come caricare l'immagine sul Database :

'Funzione che carica l'immagine nel Database Private Sub CaricaImgData() Dim cn As New SqlConnection(strCn) Dim cmd As New SqlCommand("INSERT INTO BLOBTest (BLOBData) " & _ "VALUES (@BLOBData)", cn) Dim strBLOBFilePath As String = _ "C:\Users\DAVIDE\Pictures\Img\1-1.png" Dim fsBLOBFile As New FileStream(strBLOBFilePath, _ FileMode.Open, FileAccess.Read) Dim bytBLOBData(fsBLOBFile.Length() - 1) As Byte fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length) fsBLOBFile.Close() Dim prm As New SqlParameter("@BLOBData", SqlDbType.VarBinary, _ bytBLOBData.Length, ParameterDirection.Input, False, _ 0, 0, Nothing, DataRowVersion.Current, bytBLOBData) cmd.Parameters.Add(prm) cn.Open() cmd.ExecuteNonQuery() cn.Close() End Sub

Recupera la lista delle Immagine del Database :

'Funzione che recupera la lista delle immagini dal Database Private Function RecuperaImgData() As List(Of Image) Dim cn As New SqlConnection(strCn) Dim cmd As New SqlCommand("SELECT BLOBID, " & _ "BLOBData FROM BLOBTest ORDER BY BLOBID", cn) Dim da As New SqlDataAdapter(cmd) Dim ds As New DataSet() Dim img As List(Of Image) = New List(Of Image) da.Fill(ds, "BLOBTest") Dim c As Integer = ds.Tables("BLOBTest").Rows.Count While (c > 0) Dim bytBLOBData() As Byte = _ ds.Tables("BLOBTest").Rows(c - 1)("BLOBData") Dim stmBLOBData As New MemoryStream(bytBLOBData) img.Add(Image.FromStream(stmBLOBData)) c = c - 1 End While Return img End Function

Recupera immagine in base all'id del record nel Database :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Codice SQL come è creata la tabella Demo :

CREATE TABLE BLOBTest ( BLOBID INT IDENTITY NOT NULL, BLOBData IMAGE NOT NULL )

Aggiungere anche la stringa di connessione, modificarla in base al vostro server sql

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Link Utili :

http://www.dreamincode.net/forums/topic/103960-save-and-retrieve-images-with-sql-server/
http://www.codeproject.com/Articles/437937/Save-and-Retrieve-Image-from-a-SQL-Server-Database

Se vuoi ti allego anche il file Demo che ho creato.

N.B. : Ricuperata l'immagine tu la puoi adattare tranquillamente alla grandezza che vuoi.

Saluti Davide,
Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5