Как отключить нулевое изображение в столбце изображения DataGridView при заполнении из DataTable

У меня есть существующее приложение с новым требованием отображать изображение в ячейке DataGridView, чтобы указать, имеет ли запись определенный флаг, связанный с ней или нет (, не редактируемый пользователем, это происходит из БД ).

Если есть флаг, я показываю соответствующее изображение, а если флага нет, я хочу, чтобы в столбце ничего не отображалось.

Столбцы DataGridView не были созданы в конструкторе Visual Studio, иначе это было бы просто. Я мог бы просто установить свойство NullValue для столбца. Вместо этого столбцы создаются во время выполнения, когда все данные загружаются в DataTable, а затем из этого DataTable создается DataView, а затем в качестве источника данных DataGridView устанавливается DataView.

Я не могу полностью переписать это, иначе я бы просто определил столбцы в VS Designer вместо этого нелепого способа просто разрешить определение столбцов из DataTable.

Тогда мой вопрос: как я могу сделать так, чтобы столбец с изображениями ничего не отображал, когда базовая таблица данных имеет значение null?

Вот немного псевдо-C #, чтобы продемонстрировать, что я имею в виду. Помните, я писал его не для использования двух таких таблиц DataTable; так было, когда мне его передали, и я не хочу вносить кардинальные изменения только для того, чтобы добавить новую колонку...

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?

РЕДАКТИРОВАТЬ :Вот скриншот, чтобы вы могли видеть, что я имею в виду под маленькой коробкой с X -, это все нули...

DataGridView with Null Images

Кроме того, это должна быть.NET 3.5, поэтому, если есть решение только в.NET 4.0, мне не повезло.

14
задан Jim 2 August 2012 в 17:11
поделиться