Hallo zusammen,
suche nun schon einigen Tagen nach der Lösung meines Problems:
Szenario: habe 2 Tabellen in einem Dataset.
damit ich mir zu jedem device die beinhalteten PORT's anzeigen lassen kann, habe ich einem Datagrid eine Relation zugewiesen. (Die Navigation zwischen den "devices" erfolgt über ein databindung auf eine ComboBox):
dataGrid1.DataSource=dataset1.Tables["device"];
dataGrid1.DataMember="device_PORT";
die Relation "device_PORT" wurde von C# automatisch anhand der ID's erstellt.
Anzeige soweit funktioniert auch wunderbar.
Problem:
In der PORT Tabelle ist eine spalte mit boolschen Werten enthalten, welche ich gerne als checkbox anzeigen würde. Diese Möglichkeit (+weitere grafische features) bietet meiner Ansicht nach ein Tablestyle mit gridBoolColumnStyle. Wenn ich dem Tablestyle allerdings die Relation als MappingName zuweisen will, wird das Style leider nciht angezeigt.
dataGridTableStyle1.MappingName="device_PORT";
dataGridBoolColumn1.MappingName="checked"; //bool Spalte
Versuche das Tablestyle direkt auf die Tabelle "device" oder "PORT" anzuwenden haben allerdings funktioniert.
Nur eben die Anwendung auf eine "Unterliste" von device will partout nicht funktioniert 🙁
Bitte helft mir!
Wenn ich dem Tablestyle allerdings die Relation als MappingName zuweisen will, wird das Style leider nciht angezeigt.
Bei der GridBoolColumn musst du den PropertyName auf das Attribut der Relation, also der Name der Column mit dem bolschen Wert setzen.
Gruss,
.unreal
ja, habe die boolcolumn schon auf den entsprechenden Spaltenname gesetzt
dataGridBoolColumn1.MappingName="checked";
oder was meinst du mit Property?
problem is dass das tablestyle schonmal grundsätzlich nicht angewendet wird auf die relation im Datagrid. (habe testweise headerfarbe etwas verändert um es dann sehen zu können)
hat noch jemand ne idee?
sorry, ich habe mich unklar ausgedrückt.
Poste doch mal etwas Code. Headerfarben usw. sollten da nichts beeinflussen!
.unreal
edit: ist checked wirklich der spaltenname?
ok, hier etwas mehr code:
designercode:
// dataGridTableStyle1
//
this.dataGridTableStyle1.DataGrid = this.dataGrid1;
this.dataGridTableStyle1.GridColumnStyles.AddRange(new System.Windows.Forms.DataGridColumnStyle[] {
this.dataGridBoolColumn1,
this.dataGridTextBoxColumn1});
this.dataGridTableStyle1.GridLineColor = System.Drawing.SystemColors.ActiveCaptionText;
this.dataGridTableStyle1.HeaderBackColor = System.Drawing.SystemColors.Highlight;
this.dataGridTableStyle1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGridTableStyle1.MappingName = "";
Funktion zum Öffnen der XML:
private void btnLoadXML_Click(object sender, System.EventArgs e)
{
ds1.ReadXml("test.xml");
//resourcen zuweisen-------------------------------------------
dataGrid1.DataSource=ds1.Tables["device"];
//Bindungen zuweisen------------------------------------------
comboBox1.DataSource=ds1.Tables["device"];
comboBox1.DataBindings.Add("Text",ds1.Tables["device"],"name");
comboBox1.DisplayMember="name";
//relationen zuweisen---------------------------------------------
dataGrid1.DataMember="device_PORT";
//tablestyle zuweisen-----------------------------------------------
dataGridTableStyle1.MappingName=dataGrid1.DataMember;
dataGridTextBoxColumn1.MappingName="name";
dataGridBoolColumn1.MappingName="checked";
}
XML-Schema:
<devices>
<device name="AIRGAP">
<PORT>
<Portadress>airgapPort101</Portadress>
<Fcode>14</Fcode>
<Zyklus>1</Zyklus>
<checked>true</checked>
</PORT>
<PORT>
...
</PORT>
</device>
<device name="Serielle Schnittstelle">
...
</device>
</devices>
das datagrid hat derzeit noch Column und RowHeader. Deswegen kann man sehen wenn das Datagrid das Style angenommen hat. Wie beschrieben funktioniert das auch alles wenn ich dem Datagrid eine Tabelle zuweise und dem Tablestyle dementsprechend das gleiche. Wenn im tablestyle natürlich die column nicht richtig angegeben sind werden keine Spalten angezeigt. Die geänderte Hintergrundfarbe is aufgrund der RowHeader trotzdem zu sehen
vielen dank für die Bemühungen!