giovedì 17 settembre 2026
C# Entity Framework Core e SQLite: errore "SQLite Error 14: unable to open database file"
mercoledì 16 settembre 2026
C# Filtrare i record di un DataTable in base alla selezione di un DataGridView
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);
}
}
martedì 15 settembre 2026
C# realizzare una galleria fotografica con .NET 10 e Windows Forms
C#
private void BtnTrovaCartella_Click(object sender, EventArgs e)
{
try
{
using (FolderBrowserDialog folderBrowserDialog =
new FolderBrowserDialog())
{
folderBrowserDialog.Description
= "Seleziona la cartella dove si trovano i file
Immagine";
folderBrowserDialog.RootFolder
= Environment.SpecialFolder.Desktop;
if (folderBrowserDialog.ShowDialog()
== DialogResult.OK)
{
// Imposto il percorso selezionato
nella casella di testo
TxtPercorsoImmagini.Text = folderBrowserDialog.SelectedPath;
}
}
}
catch (Exception)
{
throw;
}
}
C#
private string[] imgFiles;
private int
indiceCorrente = 0;
C#
private void LoadImagesDaCartella(string cartella)
{
try
{
if (!Directory.Exists(cartella))
{
Directory.CreateDirectory(cartella);
}
// Filtra solo formati immagine comuni
imgFiles = Directory.GetFiles(cartella)
.Where(file =>
file.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)
||
file.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase)
||
file.EndsWith(".png", StringComparison.OrdinalIgnoreCase)
||
file.EndsWith(".bmp", StringComparison.OrdinalIgnoreCase)
||
file.EndsWith(".gif", StringComparison.OrdinalIgnoreCase)
)
.ToArray();
}
catch (Exception ex)
{
MessageBox.Show($"Errore nel caricamento immagini: {ex.Message}", "Errore", MessageBoxButtons.OK,
MessageBoxIcon.Error);
imgFiles
= Array.Empty<string>();
}
}
C#
private void timer1_Tick(object sender, EventArgs e)
{
try
{
indiceCorrente = (indiceCorrente + 1) % imgFiles.Length;
pcbGalleria.Image?.Dispose(); // Libera la
precedente immagine
pcbGalleria.Image = Image.FromFile(imgFiles[indiceCorrente]);
}
catch (Exception ex)
{
timer1.Stop();
MessageBox.Show($"Errore durante il caricamento dell'immagine: {ex.Message}", "Errore", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
C#
private void BtnAvvia_Click(object sender, EventArgs e)
{
if
(TxtPercorsoImmagini.Text.Trim()
== "")
{
MessageBox.Show($"Seleziona un percorso dove sono presenti le
immagini", "Gallery", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
LoadImagesDaCartella(TxtPercorsoImmagini.Text);
if
(imgFiles.Length > 0)
{
indiceCorrente = 0;
pcbGalleria.Image?.Dispose();
pcbGalleria.Image = Image.FromFile(imgFiles[indiceCorrente]);
timer1.Interval = (int)nudSecondi.Value;
timer1.Start();
}
else
MessageBox.Show("Nessuna immagine trovata nella cartella
'Images'.", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}


