Pergunta

eu tenho este cenário:

[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);

O que eu gostaria é de alguma forma vincular o valor enumed de cores escolhidas na DataTable "cores" de coluna para o CheckedListBox em um bom caminho. é possível?

Até agora eu tenho jogado com o evento RowEnter da grelha, mas isso parece muito frágil e não muito bom em tudo.

EDIT: por exemplo, se eu tinha um quarto da coluna na tabela de dados chamada MyText eu poderia ligar a coluna a uma caixa de texto como este:

myTextBox.DataBindings.Add("Text", dt, "MyText");

quando se deslocam através das linhas em um datagrid o valor nas alterações caixa de texto Automaticamente e quaisquer atualizações para o caixa de texto são salvos de volta para a tabela de dados. eu gostaria de obter este functionalty do CheckListBox e enums também.

Foi útil?

Solução

Não há nenhuma maneira fácil de fazê-lo como este não é um cenário típico de detalhes mestre. Eu acho que você deve começar a escrita que afinal código.

Outras dicas

Eu não sei exatamente o que você está depois, mas você pode usar um algoritmo guloso para determinar quais as cores que estão sendo usados?

Por exemplo, você tem o número 11. A única maneira possível de obter 11 é por ter amarelo, de modo a remover o maior número que se encaixa (8), e marque a caixa de seleção correspondente. Então você começa 3. Maior número que se encaixa é 2 (azul), em seguida, o restante é óbvio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top