+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Datagridview CheckBox Column: consentire la selezione di una CheckBox alla volta

  1. #1
    L'avatar di amanu86
    amanu86 non è in linea Scolaretto
    Ciao a tutti,
    sto cercando di gestire una colonna checkbox su un datagridview in visual studio 2008...
    Ho inserito la colonna ma non riesco a capire come fare a gestire gli eventi:
    Per prima cosa vorrei che fosse selezionabile una sola checkbox, quindi se l'utente spunta una prima casella se ne spunta la seconda la prima dovrà perdere la spunta.

    Poi vorrei sapere alla pressione di un tasto ok, posizionato sul form, qual'è la riga selezionata....

    Grazie per il vostro tempo...
    Ultima modifica di elisab; 27-03-2011 04:48 
    ℹ️ Leggi di più su amanu86 ...

  2. #2
    Quote Originariamente inviato da amanu86 Visualizza il messaggio
    Per prima cosa vorrei che fosse selezionabile una sola checkbox, quindi se l'utente spunta una prima casella se ne spunta la seconda la prima dovrà perdere la spunta.
    Chiamato DGV il DataGridView, e supponendo che l'indice di colonna CheckBox sia il 2 :
        Private Sub DGV_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV.CellContentClick
            If e.ColumnIndex = 2 And DGV(e.ColumnIndex, e.RowIndex).Value = False Then
                For i As Integer = 0 To DGV.RowCount - 1
                    If i <> e.RowIndex Then DGV(2, i).Value = False
                Next
            End If
        End Sub
    
    Quote Originariamente inviato da amanu86 Visualizza il messaggio
    Poi vorrei sapere alla pressione di un tasto ok, posizionato sul form, qual'è la riga selezionata....
    Per "riga selezionata" occorre che la riga sia interamente selezionata ( ad esempio sul RowHeader ) :

            Try
                MessageBox.Show(DGV.SelectedRows(0).Index)
            Catch ex As Exception
            End Try
    
    SelectedRows(0) nell'ipotesi che ci possano essere più righe selezionate ( multiselect )...

    ℹ️ Leggi di più su MarcoGG ...

  3. #3
    L'avatar di amanu86
    amanu86 non è in linea Scolaretto
    Quote Originariamente inviato da MarcoGG Visualizza il messaggio
    Chiamato DGV il DataGridView, e supponendo che l'indice di colonna CheckBox sia il 2 :
        Private Sub DGV_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV.CellContentClick
            If e.ColumnIndex = 2 And DGV(e.ColumnIndex, e.RowIndex).Value = False Then
                For i As Integer = 0 To DGV.RowCount - 1
                    If i <> e.RowIndex Then DGV(2, i).Value = False
                Next
            End If
        End Sub
    


    Per "riga selezionata" occorre che la riga sia interamente selezionata ( ad esempio sul RowHeader ) :

            Try
                MessageBox.Show(DGV.SelectedRows(0).Index)
            Catch ex As Exception
            End Try
    
    SelectedRows(0) nell'ipotesi che ci possano essere più righe selezionate ( multiselect )...

    Ciao, inanzitutto grazie per l'aiuto.

    ancora una cosa non mi è chiara e rigurda la selezione della riga, con il codice che mi hai postato tu:

    Codice:
    
            Try
                MessageBox.Show(DGV.SelectedRows(0).Index)
            Catch ex As Exception
            End Try
    
    Ottengo la riga evidenziata giusto? Invece io vorrei ottenere la riga che ha la checkbox selezionata.

    Grazie
    ℹ️ Leggi di più su amanu86 ...

  4. #4
    Quote Originariamente inviato da amanu86 Visualizza il messaggio
    Invece io vorrei ottenere la riga che ha la checkbox selezionata.
    Semplice :
            For i As Integer = 0 To DGV.RowCount - 1
                If DGV(2, i).Value = True Then
                    MessageBox.Show(i)
                    Exit For
                End If
            Next
    
    dove i è l'indice di riga con il valore CheckBox a True.
    ℹ️ Leggi di più su MarcoGG ...

  5. #5
    alpynet non è in linea Novello
    Ciao, io il codice lo avrei scritto in questa maniera:
        Dim idxRow As Integer = -1
    
        Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            If e.ColumnIndex = 0 Then
                If Not idxRow = e.RowIndex Then
                    If idxRow > -1 Then
                        DataGridView1(0, idxRow).Value = False 
                    End If
                    idxRow = e.RowIndex
                Else
                    idxRow = -1
                End If
            End If
        End Sub
    
    e l'indice della riga me lo ritrovo in idxRow (se = -1 significa che non c'è una riga selezionata).
    Penso che non facendo uso del ciclo for, sia un po' più veloce...anche se la differenza la si noterebbe solo alla presenza di un notevole numero di righe.

  6. #6
    Quote Originariamente inviato da alpynet Visualizza il messaggio
    Ciao, io il codice lo avrei scritto in questa maniera:
    ...
    e l'indice della riga me lo ritrovo in idxRow (se = -1 significa che non c'è una riga selezionata).
    Penso che non facendo uso del ciclo for, sia un po' più veloce...anche se la differenza la si noterebbe solo alla presenza di un notevole numero di righe.
    Ma c'è un MA : se leggi il post d'apertura :

    "Poi vorrei sapere alla pressione di un tasto ok, posizionato sul form, qual'è la riga selezionata...."

    Perciò tutto lasciava intendere che il rilevamento della riga con CheckBox selezionato andasse su una procedura separata da quella della selezione stessa...
    ℹ️ Leggi di più su MarcoGG ...

  7. #7
    alpynet non è in linea Novello
    Quote Originariamente inviato da MarcoGG Visualizza il messaggio
    Perciò tutto lasciava intendere che il rilevamento della riga con CheckBox selezionato andasse su una procedura separata da quella della selezione stessa...
    Ciao, proprio per questo motivo, ho pensato di utilizzare una variabile a livello generale Dim idxRow As Integer = -1 in modo da poterla richiamare nella procedura separata per sapere il numero della riga selezionata. Ripeto, non so se è meglio una piuttosto che l'altra, visto che si utilizza una var a livello generale. Il mio voleva essere solo un'altro punto di vista, e nello spirito informatico, cercare di capire (anche per me stesso) quale linea sia meglio seguire, e cercare degli spunti per ottimizzare al meglio quanto messo a disposizione da tutta la comunità.
    Comunque sia, non conoscendo tutto il progetto, potrebbero esserci anche altre strade migliori da seguire..

  8. #8
    Quote Originariamente inviato da alpynet Visualizza il messaggio
    Ciao, proprio per questo motivo, ho pensato di utilizzare una variabile a livello generale Dim idxRow As Integer = -1 in modo da poterla richiamare nella procedura separata per sapere il numero della riga selezionata. Ripeto, non so se è meglio una piuttosto che l'altra, visto che si utilizza una var a livello generale. Il mio voleva essere solo un'altro punto di vista, e nello spirito informatico, cercare di capire (anche per me stesso) quale linea sia meglio seguire, e cercare degli spunti per ottimizzare al meglio quanto messo a disposizione da tutta la comunità.
    Comunque sia, non conoscendo tutto il progetto, potrebbero esserci anche altre strade migliori da seguire..
    Nessun problema alpynet.

    Ho semplicemente riportato il testo esatto della richiesta iniziale.
    E ti spiego perchè, in base a quella richiesta, non sono molto d'accordo con il tuo suggerimento : se il richiedente vuole sapere quale riga ha il CheckBox selezionato, ciò non implica automaticamente che debba essere stato selezionato "a mano".
    Perciò :
        Dim idxRow As Integer = -1
    
        Private Sub DataGridView1_CellContentClick()
        ...
    
    servirebbe solo nel caso di selezione utente.
    Se l'operazione di selezione arrivasse da altro codice, o da altro tipo di interazione indiretta che non coinvolge CellContentClick() saresti comunque costretto ad andarti a cercare la riga con la selezione...
    Tutto ciò ovviamente se l'interpretazione della richiesta è corretta...
    ℹ️ Leggi di più su MarcoGG ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 4
    Ultimo Post: 19-10-2009, 23:00
  2. CheckBox column su DataGrid
    Da Leonardo86 nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 16-07-2008, 18:21
  3. Selezione criteri query con checkbox
    Da berto78 nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 18-04-2008, 21:55
  4. Checkbox selezionabili uno x volta
    Da Carmen nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 12-12-2007, 17:05
  5. [ASP]Selezione mediante checkbox
    Da maximum nel forum ASP 3, ASP .Net
    Risposte: 2
    Ultimo Post: 10-09-2007, 09:06