
Quando le celle di una DataGridViewImageColumns contengono dei valori Null, visualizzano al loro interno delle sgradevoli immagini col simbolo di errore.
Queste icone vengono comunque sempre visualizzate nella NewRow (riga dei nuovi record) della DataGridView nel caso fosse presente una DataGridViewImageColumn.
Questo comportamento può essere controproducente perché potrebbe indurre un utente molto accorto a sospettare di trovarsi a che fare con un qualche tipo di errore non intercettato della nostra applicazione.
Per evitarlo dobbiamo modificare lo stile predefinito delle celle presenti nella DataGridViewImageColumn. Questo stile è definito dalla classe DataGridViewCellStyle che rappresenta le informazioni relative alla formattazione ed allo stile applicate alle singole celle all'interno di una DataGridView.
Modificare in modo corretto lo stle può risultare poco intuitivo perché non lo si può fare direttamente dall’IDE di Visual Studio, o più precisamente, se modificato in fase di progettazione, verrà sollevata una System.FormatException ogni qualvolta le celle della DataGridViewImageColumn interessata richiameranno il proprio metodo Paint.
Questa eccezione la ritroviamo, stranamente, anche nella prima release di VS2008 Express.
Bisogna quindi gestire lo stile tramite codice.
Iniziamo a creare un DefaultCellStyle personalizzato cominciando col definirne una nuova istanza nell'evento Load della nostra form:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
MyBase.Load
Dim NullImageCellStyle As New DataGridViewCellStyle
Ciò che determina o meno la visualizzazione dell’icona di errore è la sua proprietà NullValue che di default è impostata a System.Drawing.Bitmap. Per impedire questo comportamento bisogna impostarla su Nothing
NullImageCellStyle.NullValue = Nothing
Possiamo impostare anche tutte le altre proprietà che ci interessano per avere la formattazione desiderata
' Centra l'icona nella cella.
NullImageCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
Infine applichiamo lo stile alla DataGridViewColumnImage
Me.dgvColumn_Icon.DefaultCellStyle = NullImageCellStyle
End Sub
Potevamo più semplicemente modificare lo stile predefinito della DataGridView in questo modo
Me.MyDGV1.DefaultCellStyle.NullValue = Nothing
ma così facendo, applicandolo a tutte le celle dell’intera griglia, avremmo corso il rischio di compromettere la formattazione scelta per altre celle.
A questo punto abbiamo risolto il problema delle celle con valore Null…
…ma l'immagine di errore persiste nella NewRow.
Per risolvere anche questo problema bisogna intercettare l’evento RowsAdded della griglia tramite l’apposito gestore di eventi ed impostare esplicitamente il valore della relativa cella a Nothing
Private Sub MyDGV1_RowsAdded(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) _
Handles MyDGV1.RowsAdded
Me.MyDGV1.Rows(e.RowIndex).Cells(dgvColumn_Icon.Index).Value = Nothing
End Sub
Ecco finalmente la nostra griglia visualizzata correttamente: