Firemonkey: Ler a propriedade SelectedValue de um combobox ou listbox

Delphi

20/05/2014

Saudações!

Estou utilizando Delphi XE5 e num projeto Firemonkey Desktop não consigo ler a propriedade SelectedValue de um combobox ou listbox.

Para exemplificar criei um projeto simples, utilizando um PrototypeBindSource como fonte de dados, um combobox, um botão e um label, onde via livebindings liguei
o campo ColorsName1 (campo com o texto a ser apresentado) a propriedade Item.text do combobox e o campo AlphaColor1 (campo id a ser retornado) a propriedade Item.LookupData e para que seja retornado o id ao label, liguei a propriedade SelectedValue do combo a propriedade Text do label. Estes relacionamentos pode ser observado na figura abaixo:
[img:descricao=LiveBindings Designer e Formulário em Run Time]http://arquivo.devmedia.com.br/forum/imagem/330322-20140520-130408.jpg[/img]

O Problema é que não consigo ler via código a propriedade SelectedValue do combo box.

O Mais proximo que cheguei foi:

if Assigned(ComboBox1.Selected) then
ShowMessage(IntToStr(Integer(ComboBox1.Selected.Data)));

ou

ShowMessage(ComboBox1.ListItems[ComboBox1.ItemIndex].ItemData.Text);

Mas estão retornando vazio ao invés do id do registro.

Agradeço a quem poder ajudar.
Tecnolens Ltda

Tecnolens Ltda

Curtidas 0

Melhor post

éder Brandão

éder Brandão

01/09/2014

A forma mais simples de resolver este problema e usar no LiveBinding a propriedade Synch do ListBox e ligar ao (*) asterisco do BindSource. Dessa forma ele ira mover o cursor do DataSet permitindo buscar qualquer valor. Outra solução que encontrei e Ligar o campo chave do DataSet a propriedade LookupData do listbox e então ligar o SelectValue a alguma propriedade Tag de outro componente.

Espero ter ajudado!

Abraço a todos!
GOSTEI 1

Mais Respostas

Cauê Nishijima

Cauê Nishijima

20/05/2014

Não seria assim :

if Assigned(ComboBox1.Selected) then
     ShowMessage(ComboBox1.Selected.Text);
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

20/05/2014

Desculpa entendi a pergunta agora, você quer pegar o valor do objeto associado a um índice do ComboBox ou do ListBox....é isso?
Se for, posta o código de como você esta atribuindo os valores ao ComboBox ou ao ListBox
GOSTEI 0
Tecnolens Ltda

Tecnolens Ltda

20/05/2014

Obrigado pela atenção!

Preciso ler o ID do registro selecionado, acredito ser da mesma forma para ComboBox ou ListBox. Quando a atribuição dos valores, fiz através do LiveBindings como mostra a figura.

Por exemplo, quando selecionar no combo Mediumvioletred, deve ler o id 4291237253, que corresponde ao ID do item selecionado.

Abraço!
GOSTEI 0
Claudia Fuzer

Claudia Fuzer

20/05/2014

Boa tarde

Você conseguiu resolver este problema? To enfrentando o mesmo aqui e até agora nada.
GOSTEI 0
Junior Dias

Junior Dias

20/05/2014

A forma mais simples de resolver este problema e usar no LiveBinding a propriedade Synch do ListBox e ligar ao (*) asterisco do BindSource. Dessa forma ele ira mover o cursor do DataSet permitindo buscar qualquer valor. Outra solução que encontrei e Ligar o campo chave do DataSet a propriedade LookupData do listbox e então ligar o SelectValue a alguma propriedade Tag de outro componente.

Espero ter ajudado!

Abraço a todos!



Bom dia Éder, estou fazendo como você sugeriu, ligando a propriedade Synch do Lisbox ao (*) do BindSource, compilando para windows funciona, porem no android não. Sabe me dizer se muda alguma coisa? Estou usando a propriedade OnItemClick do Lisbox.
GOSTEI 0
Clederson Ferreira

Clederson Ferreira

20/05/2014

if ComboBox1.ItemIndex <> -1 then
ShowMessage(ComboBox1.Items[ComboBox1.ItemIndex]);


tenta fazer assim
GOSTEI 0
Flex Ltda

Flex Ltda

20/05/2014

Dae fera!

Cara tô com o "mesmissimo" problema...como você resolveu isso?
GOSTEI 0
Alexandre Santos

Alexandre Santos

20/05/2014

 procedure TForm1.Button1Click(Sender: TObject);
var
  item: String;
begin
  { OBS: se o estilo do ComboBox for csDropDown, o
    usuário será capaz de digitar no componente. Se
    isso acontecer, o conteúdo do combo deverá ser
    obtido usando:
 
    item := ComboBox1.Text;
  }
 
  item := ComboBox1.Items[ComboBox1.ItemIndex];
 
  ShowMessage('Você selecionou o ítem ' + item);
end;
GOSTEI 0
Alexandre Santos

Alexandre Santos

20/05/2014

Imaginem que tenho uma variável do tipo String de nome: "Texto" e gostaria de pegar o item selecionado num ComboBox e passar a sua propriedade Text para esta variável:

No Firemonkey pode-se fazer assim:


Texto := (cbDB.Items.Names[cbDB.ItemIndex]);



Creio que seja apenas isto... No mais... A partir daqui já da pra ter uma noção de que é preciso acessar a propriedade "Names" dos itens e pegar o nome que estiver no índice....
GOSTEI 0
Antonio Junior

Antonio Junior

20/05/2014

A forma mais simples de resolver este problema e usar no LiveBinding a propriedade Synch do ListBox e ligar ao (*) asterisco do BindSource. Dessa forma ele ira mover o cursor do DataSet permitindo buscar qualquer valor. Outra solução que encontrei e Ligar o campo chave do DataSet a propriedade LookupData do listbox e então ligar o SelectValue a alguma propriedade Tag de outro componente.

Espero ter ajudado!

Abraço a todos!


Bom dia. Eu estou passando pela mesma situação e segui o seu exemplo. liguei a propriedade Synch do ListBox e ligar ao (*) asterisco do BindSource, e agora como faço para usar?
Estou usando combobox e quando selecionar algum item quero obter o id desse item, como fazer isso? Fico no aguardo. Obrigado
GOSTEI 0
POSTAR