Frage

ich habe folgendes Szenario vor:

[Flags]
enum Colors : long
(
    red = 1,
    blue = 2,
    green = 4,
    yellow = 8,
)

DataTable dt = new DataTable();
dt.Columns.Add("PersonName", typeof(string));
dt.Columns.Add("CheckOption", typeof(bool));
dt.Columns.Add("Colors", typeof(long));

// note that the values in the Colors column are enumed values of chosen colors
dt.Rows.Add("Name 1", true, 1); // red
dt.Rows.Add("Name 2", true, 12);    // green and yellow
dt.Rows.Add("Name 3", true, 4); // green
dt.Rows.Add("Name 4", false, 11);   // red, blue and yellow

// bind the datatable to grid
DataGridView dgv = new DataGridView();
dgv.DataSource = dt;
// hide the colors in the grid 
dgv.Columns["Colors"].Visible = false;

// checked list box has all items from the enum
CheckedListBox clb = new CheckedListBox();
string[] colorsArray = Enum.GetNames(typeof(Colors));
clb.Items.AddRange(colorsArray);

Was ich möchte, ist irgendwie den enumed Wert von gewählten Farben in einem schönen Weg zum CheckedListBox „Farben“ Spalte in Datentabelle zu binden. ist es möglich?

Bisher habe ich bisher mit Grids RowEnter Veranstaltung zu spielen, aber das scheint sehr spröde und nicht wirklich schön überhaupt.

EDIT: wenn ich eine vierte Spalte in der Datentabelle genannt MyText habe zum Beispiel könnte ich diese Spalte zu einem Textfeld wie folgt binden:

myTextBox.DataBindings.Add("Text", dt, "MyText");
automaticaly ändert und alle Aktualisierungen der Textbox gespeichert werden zurück in die Datentabelle

, wenn durch die Reihen in einem Datagrid in der Textbox der Wert bewegt. Ich mag diese functionalty vom CheckListBox und Aufzählungen erhalten.

War es hilfreich?

Lösung

Es gibt keine einfache Möglichkeit, es zu tun, wie dies kein typisches Szenario Master Detail. Ich denke, Sie sollten beginnen afterall, dass Code writting.

Andere Tipps

Ich bin mir nicht ganz sicher, was Sie nach, aber können Sie einen Greedy-Algorithmus zu ermitteln, welche Farben verwendet werden?

Zum Beispiel haben Sie die Nummer 11. Der einzig mögliche Weg 11 zu erhalten, sind von gelb sind, so dass Sie die größte Zahl entfernen, die (8) paßt, und überprüfen Sie die entsprechende Checkbox. Dann erhalten Sie 3. größte Zahl, die passt, ist 2 (blau), dann der Rest liegt auf der Hand.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top