Ho un DataGridView
con una colonna di immagini. Nelle proprietà, sto cercando di impostare l'immagine. Faccio clic sull'immagine, scelgo il file di risorse del progetto, quindi seleziono una delle immagini visualizzate. Tuttavia, l'immagine continua a essere visualizzata come una x rossa su DataGridView? Qualcuno sa perché?Immagine Immagine impostazione immagine Datagridview - C#
risposta
Ad esempio, il controllo DataGridView è denominato "dataGridView1" con due colonne di testo e una colonna di immagini. Hai anche immagini nel file di risorse denominato 'image00' e 'image01'.
È possibile aggiungere immagini, mentre l'aggiunta di righe come questa:
dataGridView1.Rows.Add("test", "test1", Properties.Resources.image00);
È inoltre possibile cambiare l'immagine, mentre la vostra applicazione è in esecuzione:
dataGridView1.Rows[0].Cells[2].Value = Properties.Resources.image01;
o si può fare in questo modo ...
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name == "StatusImage")
{
// Your code would go here - below is just the code I used to test
e.Value = Image.FromFile(@"C:\Pictures\TestImage.jpg");
}
}
@Darren Young vorresti lasciare un commento se questo non funziona e fornirò più codice per questo .. –
Mentre funzionale, c'è un problema piuttosto significativo con la risposta presentata. Suggerisce caricare le immagini direttamente dal Resources
:
dgv2.Rows[e.RowIndex].Cells[8].Value = Properties.Resources.OnTime;
Il problema è che questo crea un nuovo oggetto immagine di volta in volta come si può vedere nel file di risorse progettista:
internal static System.Drawing.Bitmap bullet_orange {
get {
object obj = ResourceManager.GetObject("bullet_orange", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
Se ci sono 300 (o 3000) righe con lo stesso stato, ciascuna non ha bisogno del proprio oggetto immagine, né ha bisogno di una nuova ogni volta che l'evento si attiva. In secondo luogo, le immagini create in precedenza non vengono eliminate.
Per evitare tutto questo, basta caricare immagini di risorse in un array ed impiego/assegnare da lì:
private Image[] StatusImgs;
...
StatusImgs = new Image[] { Resources.yes16w, Resources.no16w };
Poi, nel CellFormatting
evento:
if (dgv2.Rows[e.RowIndex].IsNewRow) return;
if (e.ColumnIndex != 8) return;
if ((bool)dgv2.Rows[e.RowIndex].Cells["Active"].Value)
dgv2.Rows[e.RowIndex].Cells["Status"].Value = StatusImgs[0];
else
dgv2.Rows[e.RowIndex].Cells["Status"].Value = StatusImgs[1];
Le stesse 2 oggetti immagine sono usati per tutte le righe.
si desidera caricare l'immagine dal file di risorse .... –