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...
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich dachte mir, diese...
Haben den cast der Spalte als DataGridViewImageColumn, dann legen Sie die DefaultCellStyle.NullValue für diese Spalte auf null. Aus meinem Beispiel oben würde Sie es so machen...
Ich denke, ich sprang die Waffe Frage hier, aber hoffe, dies hilft jemand anderes irgendwann.
Ich habe diese Lösung nicht für die Letzte Zeile
dieser hack funktioniert wie ein Chef, tks
Ich war auf der Suche für das gleiche. Basierend auf Ihrer Idee, die ich nur verändert in der Form.Designer.cs (natürlich woks nur, wenn das datagridview-nicht dynamisch generiert)
InformationsquelleAutor Jim
Fix ganze Gitter, nur fügen Sie diesen code in Formular-Konstruktor. (und ändern Sie den Namen Ihres dataGrid):
InformationsquelleAutor Alex.Uvarov