In questo frammento di codice C# vediamo come, selezionando una riga di un controllo DataGridView, sia possibile recuperare il valore di un campo chiave e utilizzarlo per filtrare i record contenuti in un DataTable.
In questo modo vengono restituiti solamente i record che hanno nel campo chiave lo stesso valore dell'ID della riga selezionata.
Il DataGridView deve contenere una colonna ID nascosta, che utilizzeremo per effettuare la condizione di filtro.
Una volta applicato il filtro, i dati vengono ordinati e proiettati nei campi necessari, per poi essere assegnati come DataSource a un secondo DataGridView.
Aggiungere lo spazio dei nomi System.Linq
C#
private void datagridview1_SelectionChanged(object sender, EventArgs e)
{
try
{
if (datagridview1.CurrentRow == null || datagridview1.CurrentRow.IsNewRow)
return;
var IdRecord = datagridview1.CurrentRow.Cells["ColonnaIDNascosta"].Value;
if (IdRecord == null || IdRecord == DBNull.Value)
return;
var righeFiltrate = dataTableDati.AsEnumerable()
.Where(r => (r.Field<int?>("CampoChiave ") ?? -1) == Convert.ToInt32(IdRecord ))
.OrderBy(r => Convert.ToString(r["CampoDataTable"]))
.Select(r => new
{
Campo = Convert.ToString(r["CampoA"]),
CampoB = Convert.ToString(r["CampoB "]),
CampoUnionte =
$"{Convert.ToString(r["CampoC "])}-{Convert.ToString(r["CampoD"])}",
CampioC = Convert.ToString(r["CampoE"])
})
.ToList();
datagridview2.DataSource = righeFiltrate;
}
catch (Exception ex)
{
Messagebox.Show("Impossibile caricare i dati.", “Errore”,
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
Nessun commento:
Posta un commento