DataGridViewCheckBoxColumn e valore dopo selezione

sabato 10 agosto 2013 - 14.29
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio Express

pieroalampi Profilo | Expert

Salve sarà la stanchezza ma non capisco perché dopo aver creato un DataGridViewCheckBoxColumn in una datagridview non riesco ad intercettare il valore di selezione all'evento click, qualcuno mi sa dire qualcosa? ecco il codice di aggiunta:

Private Sub AggiungiColonnaCheck() Dim column As New DataGridViewCheckBoxColumn If True Then column.HeaderText = "Seleziona" column.Name = "Sel" column.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells column.FlatStyle = FlatStyle.Standard column.ThreeState = False column.CellTemplate = New DataGridViewCheckBoxCell() column.CellTemplate.Style.BackColor = Color.Gray column.TrueValue = True column.FalseValue = False DataGridViewRisultati.Columns(0).Name = ("Sel") End If DataGridViewRisultati.Columns.Insert(0, column) End Sub
ed ecco sia l'evento che il codice che utilizzo per intercettare la variazione fra selezionato e deselezionato.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
ma il problema è che mi intercetta sempre il false cioe non vede mai la cella 0 in true
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA

u235 Profilo | Junior Member

DataGridViewRisultati.CurrentRow.Cells("Sel").Value dovrebbe essere di tipo object, quindi devi fare un cast a boolean per far funzionare la if

pieroalampi Profilo | Expert

non credo sia quello il problema in ogni caso grazie, credo che il problema stia nella valorizzazione della combo che avviene nel momento successivo al click sulla griglia quindi non viene letto, infatti se inserisco la routine in un tasto e la faccio partire dopo con la pressione del tasto funziona perfettamente:)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA

u235 Profilo | Junior Member

scusami, non avevo letto bene dove inserivi il codice.
purtroppo l'evento click non va bene, devi usare l'evento SelectedIndexChanged o SelectedValueChanged, per fare ciò dovresti aggiungere un campo alla classe di tipo combobox, aggiungere un handler a EditingControlShowing e uno a CellEndEdit del datagrid, il primo scatterà quando la tua cella mostrerà il controllo per editarla (quando entri nella cella) e ti fornirà tra i parametri un tipo "DataGridViewEditingControlShowingEventArgs", una proprietà di questo tipo è "Control", imposta il tuo campo combobox che hai aggiunto alla classe facendo un cast di e.Control, aggiungi un Handler al selectedIndexChanged dove farai la tua if (problema risolto). Ora non rimane altro che togliere al combobox l'handler per evitare che venga ripetuto più volte, per fare ciò usi l'evento CellEndEdit del datagrid per fare in modo che venga chiamato quando la modifica è terminata (passi ad esempio ad altra cella), e li elimini l'handler del combobox della classe (l'ultimo uilizzato)

ti faccio un esempio in c# :
...
(campi della classe)
ComboBox cb;
...
(costruttore)
dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
dataGridView1.CellEndEdit += dataGridView1_CellEndEdit;
...
(corpo della classe)
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
cb = (ComboBox)e.Control;
cb.SelectedIndexChanged += cb_SelectedIndexChanged;
}
void cb_SelectedIndexChanged(object sender, EventArgs e)
{
if(dataGridView1.CurrentRow.Cells("Sel").Value) .....
}
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
cb.SelectedIndexChanged -= cb_SelectedIndexChanged;
}
...

pieroalampi Profilo | Expert

perdonami per il ritardo sono ancora in ferie e non avevo visto il post appena ne avrò facoltà proverò il tutto per ora grazie mille
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
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