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:
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: