Comment faire pour désactiver Null image dans DataGridView image de la colonne lors de la peuplé de DataTable

J'ai une application existante avec une nouvelle exigence pour afficher une image dans un DataGridView cellule pour indiquer si l'enregistrement a un drapeau spécifique associée ou non (non modifiables par l'utilisateur, cela vient de la DB).

Si il y a un drapeau, je montre l'image correspondante, et si il n'y a pas de drapeau, je ne veux rien être indiqué dans la colonne.

Le DataGridView colonnes n'ont pas été créés dans Visual Studio designer, ou sinon, ce serait facile. Je pourrais juste mettre le NullValue bien sur la colonne. Au lieu que les colonnes sont créées lors de l'exécution lorsque toutes les données sont chargées dans une Table de données, puis un DataView est créée à partir de ce DataTable, puis le DataGridView de la source de données est définie à la DataView.

Je ne peux pas réécrire complètement le présent, sinon que je venais de définir les colonnes de VS Designer à la place de cette ridicule façon de laisser des colonnes définies à partir de la DataTable.

Ma question est donc, comment puis-je faire en sorte que la colonne avec les Images ne montre rien, lorsque les données sous-jacentes de la table a une valeur null?

Voici quelques pseudo C# pour démontrer ce que je veux dire. Rappelez-vous, je n'ai pas l'écrire à l'utilisation de deux tables de données comme ça, c'était comme ça quand je l'avais remis à moi, et je ne veux pas faire des changements drastiques juste pour ajouter une nouvelle colonne...

DataTable rawData = someMethodThatReturnsMyRawData();
DataTable data = new DataTable();
data.Columns.Add("Flags", typeof(Image));
data.Columns.Add("SomeOtherColumn");

foreach (DataRow rawDataRow in rawData.Rows)
{
    DataRow dataRow = data.NewRow();
    bool hasFlagType1 = false;
    bool hasFlagType2 = false;

    if (rawDataRow["FlagType1ID"] != DBNull.Value)
    {
        hasFlagType1 = true;
    }

    if (rawDataRow["FlagType2ID"] != DBNull.Value)
    {
        hasFlagType2 = true;
    }

    if (hasFlagType1 && hasFlagType2)
    {
        dataRow[0] = Properties.Resources.BothFlagsImage;
    }
    else if (hasFlagType1)
    {
        dataRow[0] = Properties.Resources.FlagType1Image;
    }
    else if (hasFlagType2)
    {
        dataRow[0] = Properties.Resources.FlagType2Image;
    }
    else
    {
        //If neither flag set, I don't want it to show anything,
        //but if I leave it as null, a little box with an X in it shows up
        //I could set it to some transparent GIF here, but that seems lame
    }

    dataRow[1] = rawDataRow["SomeOtherColumn"];

    data.Rows.Add(dataRow);        
}

DataView dv = new DataView(data, string.Empty, "SomeOtherColumn ASC", DataViewRowState.CurrentRows);

this.emptyDataGridViewFromDesigner.DataSource = dv;

//How can I modify the column "Flags" at this point to show nothing if the value is null?

EDIT: Voici une capture d'écran afin que vous puissiez voir ce que je veux dire par la petite boîte avec un X - ceux-ci sont tous nuls...

Comment faire pour désactiver Null image dans DataGridView image de la colonne lors de la peuplé de DataTable

Aussi, il doit l'être .NET 3.5, donc si il y a une solution .NET 4.0, je suis hors de la chance.

OriginalL'auteur Jim | 2012-08-02