CheckedListBox - How to use it?


Author
Message
Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
Boa sacada. Porém, para te falar a verdade, eu nunca usei este controle "bound" a nenhum BO. Em casos deste tipo sempre uso um Infragistics Grid com um BusinessBindingSource como datasource.

Aparentemente, a mensagem de erro te informa que não encontrou o FieldPropertyDescriptor, que geralmente precisa ser definido quando você cria uma definição CUSTOM para a propriedade do BO. Em seu BO, seria algo do gênero:

#Region " Custom Field Properties "

    Protected Overrides Function GetCustomBindablePropertyDescriptors() As MicroFour.StrataFrame.Business.FieldPropertyDescriptor()
        Return New MicroFour.StrataFrame.Business.FieldPropertyDescriptor() { _
            New MicroFour.StrataFrame.Business.ReflectionPropertyDescriptor("SeuCampo", GetType(SuaTabelaBO))}
    End Function

#End Region


Um aviso, estarei fora por duas semanas, então se precisar de dar continuidade às suas dúvidas, te aconselho a escrever em Inglês para outros poderem te dar uma força.

Abraços.


Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ivan... Bom Dia...

Revendo a documentação do StrataFrame, observe o que encontrei no tópico "CheckedListBox Control Data Binding".



This is a standard Windows checked list box that allows the end-user to apply an on/off condition on each line item in the list.  By default, this control is bound to the SelectedValue property, which is not tied to the individually checked items.  

To bind to the individually checked items, the data field property bound to the control must be serialized, and the underlying database field type must be VarBinary.  Additionally, the BindingProperty must be changed to CheckedItems.



Fiz isso (criei um campo varbinary na tabela do banco de dados, marquei 'Serialize data?' no BOMapper, populei os dados com um Enumeration e alterei a propriedade BindingProperty do controle para CheckedItems), porém ao executar a aplicação e chamar o form, recebo o seguinte erro:

BusinessLayerException
  An error occurred while refreshing the data from field 'TbEntidadeSaudeSiabFamiliaMembroBO.DoencaCondicaoReferidaList' to property 'CheckedItems' on control 'cbDoencaCondicaoReferidaList.'  Are you missing FieldPropertyDescriptor for a custom property?
ArgumentException
  Não é possível ligar à propriedade 'CheckedItems' porque ela é somente leitura.
Nome do parâmetro: PropertyName

Source     : MicroFour StrataFrame Business

Stack Trace: 

   em System.Windows.Forms.Binding.CheckBinding()
   em System.Windows.Forms.Binding.SetBindableComponent(IBindableComponent value)
   em System.Windows.Forms.ControlBindingsCollection.AddCore(Binding dataBinding)
   em System.Windows.Forms.BindingsCollection.Add(Binding binding)
   em System.Windows.Forms.ControlBindingsCollection.Add(Binding binding)
   em MicroFour.StrataFrame.Business.BusinessLayer.AddBinding(Control ControlToRefresh, String PropertyName, String FieldName)
   em MicroFour.StrataFrame.Business.BusinessLayer.RefreshControl(IBusinessBindable ControlToRefresh, Boolean DataPresent)

   em MicroFour.StrataFrame.Business.BusinessLayer.RefreshBoundControls()
   em MicroFour.StrataFrame.Business.BusinessLayer.Refresh()
   em MicroFour.StrataFrame.UI.Windows.Forms.ChildFormDialog.CreateForm(Object[] Arguments)
   em MicroFour.StrataFrame.UI.Windows.Forms.ChildFormDialog.ShowDialog(Object[] Arguments)
   em MicroFour.StrataFrame.UI.Windows.Forms.ChildFormDialog.ShowDialog()
   em BDLicitecMasterSaudeBO.FormBasic.FormTbEntidadeSaudeSiabFamilia.cmdEdit_Click(Object sender, EventArgs e) na C:\Users\Rogerio\Documents\Visual Studio 2010\Projects\StrataFrameProjects\GMPlus\BDLicitecMasterSaudeBO\FormBasic\FormTbEntidadeSaudeSiabFamilia.cs:linha 149
   em System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   em System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
   em System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   em System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   em System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   em System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   em System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   em System.Windows.Forms.Control.WndProc(Message& m)
   em System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   em System.Windows.Forms.ToolStrip.WndProc(Message& m)
   em System.Windows.Forms.Control.ControlNativewindow.OnMessage(Message& m)
   em System.Windows.Forms.Control.ControlNativewindow.WndProc(Message& m)
   em System.Windows.Forms.Nativewindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


Rogério Mauri Smile

Edited 11 Years Ago by Rogerio Mauri
Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
OK, entendi.

Tudo depende muito da estrutura de seu banco de dados e da lógica de relacionamento atribuída a este caso.
Você terá que enumerar o conteúdo de seu ListBox e verificar que itens estão no estado de "Checked". Neste ponto, você deve tomar a atitude necessária em suas tabelas. Se checked, deveria existir um registro em uma "child table"? Ou, um campo de flag na sua tabela deveria estar como True? Estas condições deverão ser revistas pelo seu programa.
Então, após o controle ser populado, você deve entrar num loop Item a Item verificando se deveriam estar "checked", e depois, ao Salvar, entrar no loop novamente e verificar que atitudes deve tomar quanto aos itens que estiverem "checked" ou não.
Não há um binding por Item do controle.

Acho que para a funcionalidade que está procurando, poderia ser mais indicado um Grid utilizando o BusinessBindingSource.
Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Olá Ivan.. Grato pelo retorno...

Popular não tive problemas.

A questão, na verdade, é a binding dos itens marcados para um campo no BO vinculado (um varbinary, por exemplo). Não encontrei na documentação do StrataFrame como fazer isso.

Na prática. Um checkedlistbox exibe algumas opções (vindas de um enum). O usuário marca algumas delas e os IDs selecionados são persistidos em um campo do BO vinculado.

O que é exibido para o usuário selecionar no controle:

[X] Item A
[  ] Item B
[X] Item C

Utilizado para popular o controle CheckedListBox:

public enum Itens : byte
{
    ItemA = 1,
    ItemB = 2,
    ItemC = 3
}

Os itens A e C devem então ser persistidos em um campo de tabela.

Rogério Mauri Smile

Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
Olá Rogério.

Ficou meio vaga para mim a sua dúvida.
Quer dizer como popular o CheckedListBox?
Bom, para começar acho que poderia dar uma olhadinha no tópico "List Control Population" do help. Vai encontrar em "Application Framework" -> "UI Layer" -> "Controls" -> "List Population".

Abraços.
Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ivan... Boa Tarde...

Como utilizar o CheckedListBox com multipla escolha?
Você tem aí um exemplo?

Abraços...

Rogério Mauri Smile

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search