Evento click su colonna checkbox in dataviewgrid

di il
6 risposte

Evento click su colonna checkbox in dataviewgrid

Salve a tutti, non ho molto dimestichezza con datagridview.

Devo scatenare l'evento su un click di checkbox non mi è chiaro come leggere il valore postclick utilizzando:

 if (DataGridNodi.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "true")
{

mi aspettavo un valore booleano, ma trovo una stringa true o false.

Quali di questo evento è quello corretto per ottenere il valore post click.

 private void DataGridNodi_CellContentClick(object sender, DataGridViewCellEventArgs e)
{

   }

private void DataGridNodi_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)

{

   }

Il codice funziona, ma legge sempre false.

Cosa sbaglio?

Grazie

Sebastiano Floridia

6 Risposte

  • Re: Evento click su colonna checkbox in dataviewgrid

    Hai provato a vedere in questo sito? Ci sono diversi articoli sul controllo DatagridView.

    Te ne riporto due che fanno al caso tuo, questo https://www.iprogrammatori.it/articoli/microsoft-net-framework/dotnet-datagridview-checkbox-selezionata-tutto-tramite-vbdotnet-csharp e questo https://www.iprogrammatori.it/articoli/microsoft-net-framework/datagridview-salvare-da-colonna-immagine-file-2-parte 

    Buona programmazione. 

  • Re: Evento click su colonna checkbox in dataviewgrid

    Grazie tante.

    Ci studio.

    Saluti

    Sebastiano

  • Re: Evento click su colonna checkbox in dataviewgrid

    E' un piacere. Oltre ai due articoli segnalati, se cerchi in questa bellissimo sito, inserendo nella casella di testo "DatagridView" trovi altri articoli. 

    Buona programmazione. 

  • Re: Evento click su colonna checkbox in dataviewgrid

    17/01/2025 - SebastianoFloridia ha scritto:

    mi aspettavo un valore booleano, ma trovo una stringa true o false

    Ciao Sebastiano,

    mi viene il dubbio che tu modifichi una qualche proprietà di un oggetto. Non sarebbe meglio quindi creare l'apposito evento nella classe e gestire quello invece di andare a cercare il click?

  • Re: Evento click su colonna checkbox in dataviewgrid

    17/01/2025 - SebastianoFloridia ha scritto:

    Il codice funziona, ma legge sempre false.

    Cosa sbaglio?

    Ciao, per esempio puoi gestire l'evento in CellValueChanged in questo modo: (ma tutto dipende dallo scenario che hai)

    YourDataGridView = nome della tua datagrdiview

    YourColumnName = nome della colonna dove si trova la tua checkbox

            private void YourDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex >= 0)
                {
                    if (e.ColumnIndex == YourDataGridView.Columns["YourColumnName"].Index)
                    {
                        MessageBox.Show("New state: " + (bool)YourDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
                    }
                }
            }
    

    Sempre per Esempio a questo punto puoi testare lo stato della checkbox ed eseguire le azioni che ritieni opportuno :

            private void YourDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                // check rows exists
                if (e.RowIndex >= 0)
                {
                    // check if the column changed
                    if (e.ColumnIndex == YourDataGridView.Columns["YourColumnName"].Index)
                    {
                        // check checkbox status
                        if ((bool)YourDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)
                        {
                        	// perform the actions by state = true .....
                            MessageBox.Show("New state: True");
                        }
                        else
                        {
                        	// perform the actions by state = false .....
                            MessageBox.Show("New state: False");
                        }
                    }
                }
            }

    Quanto sopra solo un piccolo esempio usando un certo evento, ma come detto in precedenza tutto dipende dal tuo specifico scenario

  • Re: Evento click su colonna checkbox in dataviewgrid

    21/01/2025 - By65Franco ha scritto:

    Il codice funziona, ma legge sempre false.

    Cosa sbaglio?

    Ciao, scusa mi sono dimenticato l'aspetto che segnalavi nel post dove dicevi di ricevere sempre il valore = false...... 
    quindi se vuoi sapere all'istante se hai modificato il valore della checkbox e non dopo aver confermato l'edit, allora puoi usare la tecnica forzando il commit edit.

    Ti riporto l'esempio completo dove aggiungere l'evento appena descritto:

            // DATAGRIDVIEW - CHECK VALUE EVENT CHANGED FOR THE CURRENT CELL
    		private void YourDataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
            {
                // check only checkbox cells
                if (YourDataGridView.CurrentCell is DataGridViewCheckBoxCell && YourDataGridView.IsCurrentCellDirty)
                {
                    // confirm commit change value
                    YourDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
                }
            }
    
            // DATAGRIDVIEW - CONTROLS EVENT VALUE CHANGING CELL
    		private void YourDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                // check rows exists
                if (e.RowIndex >= 0)
                {
                    // check if the column changed
                    if (e.ColumnIndex == YourDataGridView.Columns["YourColumnName"].Index)
                    {
                        // check checkbox status
                        if ((bool)YourDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)
                        {
                        	// perform the actions by state = true .....
                            MessageBox.Show("New state: True");
                        }
                        else
                        {
                        	// perform the actions by state = false .....
                            MessageBox.Show("New state: False");
                        }
                    }
                }
            }

    Rispetto all'esempio precedente, viene forzato endedit della cella/celle di tipo checkbox e sempre in evento CellValueChanged eseguirai il discrimine per quale checkbox (su quale colonna) eseguire le tue azioni al cambio di stato.

Devi accedere o registrarti per scrivere nel forum
6 risposte