Impostare dinamicamente un’immagine in un DataGridView

In un’applicazione Web visualizzare un’immagine in un GridView come ImageUrl di un ImageButton secondo i dati, risulta immediato; per un’applicazione Windows fare la stessa cosa non è così semplice.

Nel DataGridView va creata una colonna (può anche essere non visibile) che servirà per determinare quale immagine visualizzare, poi da codice si fa il resto (vedi immagine).

ImmaginePost

In questo caso ho creato un elenco con le seguenti informazioni (vedi codice):

   1: enum EnumsStatoMagazzino
   2:   {
   3:     Disponibile = 0,
   4:     UtilizzoScorte = 1,
   5:     ScorteInEsaurimento = 2,
   6:     ScorteEsaurite = 3,
   7:     NonDisponibile = 4
   8:   }
   9:  
  10:   struct CD
  11:   {
  12:     public String Artista { get; set; }
  13:     public String TitoloAlbum { get; set; }
  14:     public String Genere { get; set; }
  15:     public Int16 AnnoUscita { get; set; }
  16:     public Double Prezzo { get; set; }
  17:     public EnumsStatoMagazzino Stato { get; set; }
  18:   }

L’enum verrà utilizzato per effettuare il confronto su quale immagine visualizzare.

L’evento che determinerà quale Immagine visualizzare è il “DataGrid_ViewCellFormatting”.

   1: /// <summary>
   2:    /// Si verifica ogni volta che il contenuto della cella
   3:    /// deve essere formattato per la visualizzazione
   4:    /// </summary>
   5:    /// <param name="sender"></param>
   6:    /// <param name="e"></param>
   7:    private void dataGridView1_CellFormatting(object sender, 
                          DataGridViewCellFormattingEventArgs e)
   8:    {
   9:      DataGridView oDataGridView = (DataGridView)sender;
  10:  
  11:      if (oDataGridView.Rows[e.RowIndex].Cells["Stato"].
                      Value == null)
  12:        return;
  13:  
  14:      if (oDataGridView.Columns[e.ColumnIndex].
                              Name == "StatoMagazzino")
  15:      {
  16:        EnumsStatoMagazzino oStatoMagazzino = 
            (EnumsStatoMagazzino)oDataGridView.Rows[e.RowIndex].
             Cells["Stato"].Value;
  17:  
  18:        switch (oStatoMagazzino)
  19:        {
  20:          case EnumsStatoMagazzino.Disponibile:
  21:            e.Value = Resources.Button_Green_Icon;
  22:            break;
  23:  
  24:          case EnumsStatoMagazzino.UtilizzoScorte:
  25:            e.Value = Resources.Button_Blue_Icon;
  26:            break;
  27:  
  28:          case EnumsStatoMagazzino.ScorteInEsaurimento:
  29:            e.Value = Resources.Button_Yellow_Icon;
  30:            break;
  31:  
  32:          case EnumsStatoMagazzino.ScorteEsaurite:
  33:            e.Value = Resources.Button_Red_Icon;
  34:            break;
  35:  
  36:          case EnumsStatoMagazzino.NonDisponibile:
  37:            e.Value = Resources.Button_Gray_Icon;
  38:            break;
  39:        }
  40:      }
  41:    }

L’istruzione che verifica il contenuto della cella “Stato” serve nel caso una riga venga eliminata, per evitare di mandare in crash l’applicazione.

Le immagini sono state salvate nel file di risorse (Resources.resx).

Published Sunday, October 23, 2011 7:45 PM by MADIL
Powered by Community Server (Commercial Edition), by Telligent Systems