PDA

View Full Version : [VB.NET] Problema campo immagine con Datagridview


jackk87
21-12-2010, 22:15
Buonasera a tutti,
ho creato una datagridview con un'ultimo capo immagine

dichiarazioni generali del form:

Dim bds As New BindingSource
Dim dts As New DataSet


procedura per riempire la DGW con i clienti:


Dim dtp As OleDb.OleDbDataAdapter 'crea il dataadapter
Dim sql As String

'Query
sql = "SELECT * " & _
"FROM cliente ORDER BY cognome"

'Dataset
dts = New DataSet("cliente")
'DataAdapter
dtp = New OleDb.OleDbDataAdapter(sql, Cn)
dtp.Fill(dts, "cliente")
'BindingSource
bds = New BindingSource()
bds.DataSource = dts
bds.DataMember = "cliente"

'DataGridView
dgwClienti.DataSource = bds

dgwClienti.Columns.Item(0).Visible = False
dgwClienti.Columns.Item(1).HeaderText = "Nome"
dgwClienti.Columns.Item(1).Width = 80
dgwClienti.Columns.Item(2).HeaderText = "Cognome"
dgwClienti.Columns.Item(2).Width = 160
dgwClienti.Columns.Item(3).HeaderText = "Indrizzo"
dgwClienti.Columns.Item(3).Width = 180
dgwClienti.Columns.Item(4).HeaderText = "Cap"
dgwClienti.Columns.Item(4).Width = 50
dgwClienti.Columns.Item(5).HeaderText = "Città"
dgwClienti.Columns.Item(5).Width = 80
dgwClienti.Columns.Item(6).HeaderText = "Provincia"
dgwClienti.Columns.Item(6).Width = 60
dgwClienti.Columns.Item(7).HeaderText = "Partita IVA"
dgwClienti.Columns.Item(7).Width = 80
dgwClienti.Columns.Item(8).HeaderText = "Codice Fiscale"
dgwClienti.Columns.Item(8).Width = 120
dgwClienti.Columns.Item(9).Visible = False

dgwClienti.AllowUserToResizeRows = False

Dim nuovacolonna As New DataGridViewImageColumn
nuovacolonna = New DataGridViewImageColumn()
nuovacolonna.Image = ilLivello.Images(0)
nuovacolonna.HeaderText = "Tipo"
nuovacolonna.Width = 51
dgwClienti.Columns.Add(nuovacolonna)

For Each Row As DataGridViewRow In dgwClienti.Rows
Row.Cells(10).Value = ilLivello.Images(CInt(Row.Cells(9).Value))
Next


ilLivello è un'imagelist dove ci sono 3 immagini e il campo numero 9 della DGW contiene il livello che può assumere massimo 3 valori (0,1,2) che sarebbero gli indici delle immagini contenute nell'imagelist.

mi si presenta questo errore:
http://jackvc09.altervista.org/Immagine.JPG

allora ho inserito una nuova riga di codice:

Private Sub dgwClienti_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgwClienti.CellClick
MsgBox(dgwClienti.CurrentCell.ColumnIndex & " - " & dgwClienti.CurrentCell.RowIndex)
End Sub


così cliccando sul campo immagine la msgbox mi restituisce che ha l'indice della colonna=0 invece dovrebbe essere 10.

se questo codice lo inserisco sull'evento del click di un pulsante:

Dim nuovacolonna As New DataGridViewImageColumn
nuovacolonna = New DataGridViewImageColumn()
nuovacolonna.Image = ilLivello.Images(0)
nuovacolonna.HeaderText = "Tipo"
nuovacolonna.Width = 51
dgwClienti.Columns.Add(nuovacolonna)

For Each Row As DataGridViewRow In dgwClienti.Rows
Row.Cells(10).Value = ilLivello.Images(CInt(Row.Cells(9).Value))
Next


quindi in pratica se la colonna immagine la inserisco dopo tramite un pulsante la msgbox mi restituisce che ha come indice 10 quindi funziona tutto correttamente ed il risultato è:

http://jackvc09.altervista.org/Immagine1.JPG

Ma a me servirebbe il primo caso cioè di creare il campo immagine quando compilo la DGW.

La cosa strana se questa parte di codice la modifico così e la carico insieme alla DGW il campo immagine assume index 10 :doh: :

For Each Row As DataGridViewRow In dgwClienti.Rows
Row.Cells(0).Value = ilLivello.Images(CInt(Row.Cells(9).Value))
Next


Spero che qualcuno mi aiuti a capire questo strano comportamento della dgw grazie in anticipo a tutti :help:

jackk87
23-12-2010, 09:41
up