Ich habe eine bestehende Anwendung mit einer neuen Anforderung, ein Bild in einer DataGridView-Zelle anzuzeigen, ob der Datensatz ein bestimmtes Flag zugeordnet ist oder nicht (nicht Benutzer editierbar, das kommt von der DB).Deaktivieren von Null Bild in DataGridView Bildspalte, wenn von DataTable
Wenn es ein Flag gibt, zeige ich das entsprechende Bild, und wenn es kein Flag gibt, möchte ich nichts in der Spalte angezeigt werden.
Die DataGridView-Spalten wurden nicht in Visual Studio-Designer erstellt, sonst wäre dies einfach. Ich könnte einfach die NullValue-Eigenschaft für die Spalte festlegen. Stattdessen werden die Spalten zur Laufzeit erstellt, wenn alle Daten in eine DataTable geladen werden. Anschließend wird aus dieser DataTable eine DataView erstellt, und dann wird die Datenquelle der DataGridView auf DataView gesetzt.
Ich kann das nicht komplett neu schreiben, oder ich würde nur die Spalten in VS Designer anstelle dieser lächerlichen Art und Weise der Spalten aus der DataTable definiert werden.
Meine Frage ist dann, wie kann ich es so machen, dass die Spalte mit den Bildern nichts zeigt, wenn die zugrundeliegende Datentabelle eine Null hat?
Hier ist einige Pseudo C# zu demonstrieren, was ich meine. Denken Sie daran, ich habe es nicht geschrieben, um zwei DataTables wie dieses zu verwenden; es war auf diese Weise, als ich es mir übergeben hatte, und ich will nicht drastische Veränderungen nur um eine neue Spalte hinzuzufü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 ist ein Screenshot, damit Sie sehen, was ich meine durch die kleine Box mit einem X - das sind alle nulls ...
auch hat es .NET 3.5, um so, wenn es in .NET 4.0 nur eine Lösung ist, ich bin aus Glück.
Wie kann ich das gleiche in VB.NET tun? = Nichts, nehme ich an? –
Ich habe diese Lösung nicht für die letzte Zeile arbeiten – camino