Il frammento di codice riportato di seguito mostra come selezionare, tramite una voce del menu contestuale di un controllo DataGridView, tutte le righe che contengono lo stesso valore in una determinata colonna.
In questo esempio, la colonna di riferimento si chiama "Nome". Facendo clic con il tasto destro su una cella e scegliendo la voce del menu contestuale, verranno selezionate tutte le righe che hanno lo stesso valore nella colonna Nome.
Per prima cosa, a livello di form, dichiariamo una variabile che conterrà il valore della cella sulla quale viene eseguito il clic con il tasto destro.
Di seguito la dichiarazione della variabile.
C#
Successivamente, nell'evento CellMouseDown del controllo DataGridView, scriviamo il codice che intercetta il clic con il tasto destro, seleziona la riga corrente e memorizza nella variabile il valore della colonna Nome.
Di seguito il codice.
C#
private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
//Verifico il tasto detro e se non ha fatto click
nell'intestazione delle grafiglia o fuori dalle celle
if (e.Button != MouseButtons.Right)
return;
//Escludo intestazioni e griglia
if (e.RowIndex < 0 || e.ColumnIndex < 0)
return;
//Rilevo oggetto riga
var riga =
dataGridView1.Rows[e.RowIndex];
//seleziono la riga dove ho fatto click
dataGridView1.ClearSelection();
riga.Selected = true;
testoSel = riga.Cells["Nome"].Value?.ToString();
//Abilito il menu solo se c'è un valore
mniSeleziona.Enabled = !string.IsNullOrEmpty(testoSel);
contextMenuStrip1.Show(Cursor.Position);
}
Quando l'utente fa clic sulla voce del menu contestuale, il codice scorre tutte le righe della DataGridView e seleziona quelle che hanno lo stesso valore della colonna Nome memorizzato nella variabile testoSel.
Di seguito il codice dell'evento Click della voce di menu.
C#
private void mniSeleziona_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(testoSel))
return;
foreach (DataGridViewRow row in
dataGridView1.Rows)
{
string nome = row.Cells["Nome"].Value?.ToString();
if (nome == testoSel)
{
row.Selected = true;
}
}
}
Con questa tecnica è possibile selezionare rapidamente tutte le righe che condividono lo stesso valore in una determinata colonna. È sufficiente sostituire "Nome" con il nome della colonna desiderata per adattare il codice ad altri scenari.
Nessun commento:
Posta un commento