我有一個現有的應用程序,需要在DataGridView單元格中顯示圖像以指示記錄是否具有與其關聯的特定標誌(不是用戶可編輯,這來自數據庫)。如何從DataTable填充時禁用DataGridView圖像列中的空圖像
如果有標誌,我會顯示相應的圖像,如果沒有標誌,我不想在列中顯示任何內容。
DataGridView列不是在Visual Studio設計器中創建的,否則這很容易。我可以在列上設置NullValue屬性。相反,當所有數據加載到DataTable中時,在運行時創建列,然後從該DataTable創建DataView,然後將DataGridView的數據源設置爲DataView。
我不能完全重寫這個,否則我只是在VS Designer中定義列,而不是這種讓數據表定義列的荒謬方式。
那麼我的問題是,我怎樣才能讓底圖數據表有空的時候帶圖像的列什麼都不顯示?
下面是一些僞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的小盒子 - 這些都是空...
而且,它必須是.NET 3.5,所以如果有在.NET 4.0中的解決方案而已,我走了運氣。
如何在VB.NET中執行相同操作? =我猜想沒有? – 2016-03-17 06:52:02
我有這個解決方案不適用於最後一行 – camino 2017-01-29 16:28:58