DataGridViewImageColumn: evitare la visualizzazione dell'icona di errore in caso di valori Null

0   1


     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

2


     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…

3


…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:


4

Tag Cloud: ,

Print | posted on martedì 2 dicembre 2008 11.53

Feedback

No comments posted yet.

Your comment:





 
Please add 2 and 3 and type the answer here:

Copyright © Andrea Zingoni

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski