Gestione DataGridViewCheckBoxColumn in vbnet 2008

lunedì 20 ottobre 2008 - 17.06

trinity Profilo | Guru

salve ragazzi,
io ho inserito una colonna di tipo DataGridViewCheckBoxColumn in un datagridview, al caricamento dei dati le varie checkbox delle righe caricate devono essere sempre di tipo False ossia non cliccate, poi sarò io a scegliere quale selezionare oppure no.

Nella proprietà della colonna DataGridViewCheckBoxColumn ho settanto FalseValue=0, IndeterminateValue=Null e TrueValue=1

poi nell'evento

Private Status as Int32=0
Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
Me.DataGridView1(2, e.RowIndex).Value =0
End Sub

poi nell'evento

Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
End Sub

dovrei selezionare la riga che desidero e passare il valore 1 all'evento CellFormatting, ma allo stesso tempo la stessa riga può anche essere deselezionata e quindi ripassare il valore 0.

Secondo me sbaglio qualcosa, sapete darmi una mano?

Grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Ciao
Ma una volta selezionate le righe, tramite la DataGridViewCheckBoxColumn, cosa ne devi fare?

trinity Profilo | Guru

in pratica io devo all'inizio avere tutti i check delle righe non selezionati, poi seleziono i check che desidero e in seguito eseguirò un ciclo su le righe che hanno i check selezionati per effettuare una determinata operazione.

CIAO
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Allora potrebbe bastare questo:

For i As Integer = 0 To Me.dgv.RowCount - 1
If Me.dgv.Item(indexDataGridViewCheckBoxColumn, i).Value = True Then
' Eseguo l'operazione
End If
Next


Cosa ne dici?

Ciao

trinity Profilo | Guru

Aspetta!
il codice che mi hai passato sarebbe l'ultima mia operazione ossi ail ciclo per selezionare le righe che hanno il check attivo.
Il mio problema sta proprio nella valorizzare i check oppure no ossia il click all'interno del quadratino che rappresenta la checkbox.

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Scusa ma quella è un'operazione che avviene in automatico quando "chekki" la casella con il mouse. O no?

Se lanci questo:

For i As Integer = 0 To Me.dgv.RowCount - 1
MsgBox(Me.dgv.Item(indexDataGridViewCheckBoxColumn, i).Value)
Next

Ti restituisce True per le celle selezionate e False per quelle non.

Altrimenti non ho capito cosa devi fare

trinity Profilo | Guru

ok e va benissimo ma il non riesco a selezionare le caselle cioè a far vedere il famoso baffo verde nel quadratino.

E' qui che mi blocco

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Non è per caso che hai impostato la proprietà ReadOnly su True

trinity Profilo | Guru

si perchè?
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

ciao
se la DataGridView è impostata per la sola lettura, non potrai modificarne i valori al suo interno.

Prova a metterla su False per la DGV e mettere su True su tutte le colonne tranne quella del CheckBox.

Ciao

trinity Profilo | Guru

aspe con precisione il datagrid è readonly=true ma la colonna CheckBoxColumn ha il readonly=false
in pratica se vedi l'immagine allegata,


234x186 16Kb


io devo avere questa situazione ossia appena carico i record nel datagrid i check devono essere come nella prima figura. Poi una volta caricati l'operatore può scegliere quali check abilitare come nella seconda figura. ecco a me manca il codice che mi permette di creare sia la prima che la seconda situazione


Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Ok
>il datagrid è readonly=true ma la colonna CheckBoxColumn ha il readonly=false
devi impostare il DGV ReadOnly = False
Imposti le colonne "Stato" e "Data" a ReadOnly = True e lasci le colonne del ButtonElimina e del CheckBox a False

Per avere la situazione della prima figura (con tutte le righe non "Checkate") potresti, appena finito di caricare i dati, fare un ciclo:

For iRow as Integer = 0 to Me.DGV.RowCount -1
Me.DGV.Item(2,iRow).Value = False
Next

Come la vedi?

Ciao

trinity Profilo | Guru

>Ok
>>il datagrid è readonly=true ma la colonna CheckBoxColumn ha il readonly=false
>devi impostare il DGV ReadOnly = False
>Imposti le colonne "Stato" e "Data" a ReadOnly = True e lasci
>le colonne del ButtonElimina e del CheckBox a False
>
>Per avere la situazione della prima figura (con tutte le righe
>non "Checkate") potresti, appena finito di caricare i dati, fare
>un ciclo:
>
>For iRow as Integer = 0 to Me.DGV.RowCount -1
>Me.DGV.Item(2,iRow).Value = False
>Next

e questo codice sotto quale evento devo farlo girare?

ho scritto il tuo codice nell'evento cellformatting, mi carica i check vuoti ma quando ci vado a cliccare me ne seleziona sempre uno non posso selezionarli due o tre insieme.

Poi ho notato che l'evento cellformatting si abilita anche se passo con il mouse sul datagrid senza fare nulla...esiste un altro evento che mi faccia gestire il checkbox?

Io il cellformatting l'ho utilizzo per caricare le immagini, in questo modo:

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

solo che ora vedendo che si abilita sempre anche solo con il passaggio del mouse potrebbe sempre rallentare il sistema.

Ciao



Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Dove e come carichi la DGV?

trinity Profilo | Guru

prima di tutto ho creato una datatable e poi prima carico in dati nella datatable e poi la passo al datagrid.
la colonna button, image e check l'ho creata mediante il designer del datagrid.

poi utilizzo l'evento cellformatting per caricare delle immaginin che variano a seconda di un valore nel db ed il CellPainting per gestire il backcolor delle righe sempre a seconda di un valore nel db


Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Ok
Allora dopo che hai associato il DataSource della DGV (immagino nel Load del Form) e creato le colonne aggiuntive
lanci il ciclo.

trinity Profilo | Guru

ok!

Senti ma te se dovessi caricare in una colonna image una determinata immagine in base ad un valore che sta nel datatable ossia hai a disposizione 2 immagini, a seconda di un valore carichi una o l'altra.

Il codice che andresti ad utilizzare lo utilizzo nell'evento cellformatting oppure si può utilizzare in un altro evento?
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Mi sono andato a leggere la guida che dice:

Poiché l'evento CellFormatting si verifica ogni volta che viene disegnata una cella, si consiglia di evitare elaborazioni particolarmente lunghe quando si desidera gestire questo evento.

Ciò significa che ogni volta che ridimensioni il form o lo sposti ti ricarica le immagini.
Dal momento che caricare l'immagine che vuoi tu non è una elaborazione particolarmente lunga (credo che le tue img siano piccoline) credo che vada bene.
Se però il tuo DGV avesse 1000 righe allora, probabilmente, sarebbe preferibile caricare le immagini nell'evento Load del Form.

Ciao

trinity Profilo | Guru

dove carico le immagini al massimo saranno 20/30 righe non di +.

Grazie ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alexmed Profilo | Guru

Ciao
Scusa se rispondo solo ora.
Se hai già impostato l'evento CellFormatting lascialo lì che và più che bene.

Ciao
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5