Zum deaktivieren der Null-Bild im DataGridView-Spalte Bild, als besiedelten von DataTable

Ich habe eine bestehende Anwendung durch eine neue Anforderung, um zu zeigen Sie ein Bild in einer DataGridView-Zelle zu Kennzeichnen, ob der Datensatz hat eine bestimmte Flagge zugeordnet ist oder nicht (nicht vom Benutzer bearbeitet werden, dies kommt aus der DB).

Wenn es ein flag, zeige ich das entsprechende Bild, und wenn es keine fahne, ich will nichts angezeigt werden in der Spalte.

Dem DataGridView-Spalten wurden nicht erstellt in Visual Studio-designer, sonst würde dies einfach. Konnte ich einfach der NullValue-Eigenschaft der Spalte. Statt der Spalten, die zur Laufzeit angelegt, wenn alle für das laden der Daten in eine DataTable, und dann ein DataView-Objekt wird erstellt, der die DataTable, und dann die DataGridView Datasource gesetzt ist, um die DataView.

Kann ich nicht komplett neu schreiben, oder sonst würde ich einfach definieren die Spalten in der VS-Designer statt diese lächerliche Art, lassen nur die Spalten definiert werden, die aus der Datentabelle.

Meine Frage ist dann, wie kann ich es machen, damit die Spalte mit den Bildern zeigt nichts an, wenn die zugrunde liegenden Daten-Tabelle eine null ist?

Hier einige pseudo-C# um zu zeigen, was ich meine. Denken Sie daran, ich habe es nicht geschrieben, zwei DataTables wie dieser; es war so, wenn ich hatte, es reichte mir, und ich will nicht zu einschneidenden änderungen, nur um eine neue Spalte hinzufügen...

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: Hier ein screenshot damit Ihr seht, was ich meine, indem Sie das kleine Kästchen mit einem X, das sind alle null...

Zum deaktivieren der Null-Bild im DataGridView-Spalte Bild, als besiedelten von DataTable

Auch, es muss sein .NET 3.5, wenn es also eine Lösung .NET 4.0 nur, ich bin kein Glück.

InformationsquelleAutor Jim | 2012-08-02

Schreibe einen Kommentar