Ich habe mich entschieden, diese Frage neu zu formulieren. Hier geht ...Erstellen Sie eine DataGridView mit der zweiten Spalte vom Typ DataGridViewComboBoxColumn mit Zellenwerten vom Typ ComboboxColorItem, die meine DataSource verwendet
Ich habe eine XML-Datei:
<?xml version="1.0" standalone="yes"?>
<GenioCodes>
<Code Layer="BI" Colour="1" />
<Code Layer="BP" Colour="1" />
<Code Layer="BS" Colour="1" />
<Code Layer="C" Colour="1" />
<Code Layer="CC" Colour="1" />
<Code Layer="CR" Colour="1" />
</GenioCodes>
ich es in ein DataSet
lesen und setzen es als DataSource
auf dem DataGridView
Objekt:
m_dataSet.ReadXml(textBoxXML.Text);
m_dataGridView.DataSource = m_dataSet.Tables[0];
Die Datagridview muss haben zwei Spalten:
Spalte 1: Dies ist eine Standardeinstellung string
Spalte und sollte an das Layer Attribut gebunden werden.
Spalte 2: Dies muss eine DataGridViewComboBoxColumn
Säule sein und sollte auf die Farbe Attribut gebunden werden.
Die Zelle Objekte für Spalte 2 müssen vom Typ .Die Klasse sein:
public class ComboboxColorItem
{
public string Name { get; set; }
public ushort Index { get; set; }
public Color Value { get; set; }
public ComboboxColorItem(string Name, ushort Index, Color Value)
{
this.Name = Name;
this.Index = Index;
this.Value = Value;
}
public override string ToString()
{
return Name;
}
static public ComboboxColorItem Create(ushort iColourIndex)
{
OdCmColor oColour = new OdCmColor();
oColour.setColorIndex(iColourIndex);
ComboboxColorItem oColorItem = new ComboboxColorItem(
oColour.colorNameForDisplay(),
iColourIndex,
Color.FromArgb(oColour.red(), oColour.green(), oColour.blue()));
oColour.Dispose();
return oColorItem;
}
}
So, wie Sie sehen können, die Farbe Attribut in der XML ist nur eine Zahl. Aber wir können mit der statischen Methode ComboboxColorItem.Create
ein Zellenelement erstellen.
Wie lege ich das alles zusammen? Wie kann ich ein DataGridView erstellen, das die zweite Spalte vom Typ DataGridViewComboBoxColumn mit Zellenwerten des Typs unter Verwendung meines DataSource
?
Hinweis: Ich kann die Struktur der XML-Datei bei Bedarf ändern.
Willst du sagen, dass ich mein 'm_dataSet.Tables [0]' -Objekt iterieren und Zeilen manuell in das Grid einfügen soll? Ich folge nicht ganz. Irgendwann muss ich in der Lage sein, 'SaveXml' wieder aufzurufen, die Sie mit den aktualisierten Daten im Raster sehen. –
Würde das Speichern jeder Spalten-Dateninfo in ein separates Array funktionieren? Sie können Ihre Datenfelder aus der Datagrid-Ansicht bearbeiten, indem Sie Zeilen mit dem columnArray [datagridview.SelectedRows [0] .Index] auswählen und dann manuell zu den Zeilen hinzufügen, indem Sie den obigen Code verwenden. – iato
Wenn Sie SaveXml aufrufen möchten, können Sie Ihre Spaltenarrays benutzen, da Sie diese frei bearbeiten können ... – iato