Indexar item no combo pelo texto
Ola amigos,
estou com um seguinte problema:
tenho um combobox com itens pré estabelecidos, (estados do brasil) e cada novo registro, um item do combobox é gravado na base de dados.
até ai tudo bem, a informação é gravada normalmente.
o problema é quando abro tal registro da base de dados e tento indexar o item no combo através da informação que foi gravada na base de dados.
eu preciso mostrar a informação que esta na base de dados no text do combo, lembrando a propriedade style esta como csOwnerDrawFixed.
agradeço se alguém me ajudar.
estou com um seguinte problema:
tenho um combobox com itens pré estabelecidos, (estados do brasil) e cada novo registro, um item do combobox é gravado na base de dados.
até ai tudo bem, a informação é gravada normalmente.
o problema é quando abro tal registro da base de dados e tento indexar o item no combo através da informação que foi gravada na base de dados.
eu preciso mostrar a informação que esta na base de dados no text do combo, lembrando a propriedade style esta como csOwnerDrawFixed.
agradeço se alguém me ajudar.
Rogério Zek
Curtidas 0
Respostas
Thiago Santana
30/04/2015
Rogério não seria mais interessante ao invés de gravar o nome do item, você gravar o código?
Acho que em termos de modelagem seu sistema estaria melhor projetado!
Mas vamos lá:
Vê se isso funciona!
Espero ter ajudado
Acho que em termos de modelagem seu sistema estaria melhor projetado!
Mas vamos lá:
ComboBox1.Items.IndexOf(´seu texto´);
Vê se isso funciona!
Espero ter ajudado
GOSTEI 0
Rogério Zek
30/04/2015
Olá Thiago,
Em relação a modelagem concordo com você amigo, mas o problema é mostrar a informação no combo.
vamos lá, no combo eu pré defini os itens com as siglas dos estados para que o usuário escolha somente entre aquelas siglas.
a, para que o usuário não entre com um valor diferente dos que eu pré defini eu setei a propriedade "style" do combo para "csOwnerDrawFixed", eu acredito que o problema esteja ai, pois com a propriedade setada para csDropDown funciona normalmente com o código que você postou acima.
ainda não consegue resolver o problema.
Grato e até mais.
Em relação a modelagem concordo com você amigo, mas o problema é mostrar a informação no combo.
vamos lá, no combo eu pré defini os itens com as siglas dos estados para que o usuário escolha somente entre aquelas siglas.
a, para que o usuário não entre com um valor diferente dos que eu pré defini eu setei a propriedade "style" do combo para "csOwnerDrawFixed", eu acredito que o problema esteja ai, pois com a propriedade setada para csDropDown funciona normalmente com o código que você postou acima.
ainda não consegue resolver o problema.
Grato e até mais.
GOSTEI 0
Alexsandro
30/04/2015
Olá Rogério, não sei se você já está usando mas se não, seria melhor usar o componente TDBCombobox . que permite ser usado com datasource
GOSTEI 0
Rogério Zek
30/04/2015
Olá Alexsandro, sim já usei o DBcombo também, mas o problema persiste quando seto a propriedade style para csOwnerDrawFixed, o problema esta ai, e eu seto esta propriedade para o usuário não entrar com valores diferentes aos que estão pré definidos nos itens do DBcombo.
Valeu Alexsandro, mas o problema persiste, rsrs.
Valeu Alexsandro, mas o problema persiste, rsrs.
GOSTEI 0
Alexsandro
30/04/2015
ok...então eu faria assim...
no evento onshow do form, colocaria o seguinte código:
if suatabelaSeucampo.value = 'valor' then
begin
combobox.text := suatabelaSeucampo.value;
end;
Exemplo:
imagine que tenha uma tabela de aluno e nessa tabela tenha o campo situacao.
agora no formulário no evento onshow teria o código:
if tabelasituacao.value = 'Aprovado' then
begin
combobox1.text := tabelasituacao.value;
end
else if tabelasituacao.value = 'Reavalição' then
begin
combobox1.text := tabelasituacao.value;
end
else
begin
combobox1.text := tabelasituacao.value;
end;
no evento onshow do form, colocaria o seguinte código:
if suatabelaSeucampo.value = 'valor' then
begin
combobox.text := suatabelaSeucampo.value;
end;
Exemplo:
imagine que tenha uma tabela de aluno e nessa tabela tenha o campo situacao.
agora no formulário no evento onshow teria o código:
if tabelasituacao.value = 'Aprovado' then
begin
combobox1.text := tabelasituacao.value;
end
else if tabelasituacao.value = 'Reavalição' then
begin
combobox1.text := tabelasituacao.value;
end
else
begin
combobox1.text := tabelasituacao.value;
end;
GOSTEI 0
Ricardo Araujo
30/04/2015
Colega não sei se você conseguiu resolver seu caso, mesmo assim estou disponibilizando a solução.
primeiro criar uma variável de retorno da função com combobox.
var
Num : integer;
begin
//agora vamos ao código abaixo, para receber os dados que estará vindo do banco de dados que seria o campo estado.
Num := ComboBox1.Items.IndexOf('PE') ; // neste campo aonde esta escrito (PE) seria o coluna com banco de dados.
ComboBox1.ItemIndex := Num;
end;
caro amigo espero ter ajudando, qualquer coisa segue email: rbbarreto@hotmail.com
primeiro criar uma variável de retorno da função com combobox.
var
Num : integer;
begin
//agora vamos ao código abaixo, para receber os dados que estará vindo do banco de dados que seria o campo estado.
Num := ComboBox1.Items.IndexOf('PE') ; // neste campo aonde esta escrito (PE) seria o coluna com banco de dados.
ComboBox1.ItemIndex := Num;
end;
caro amigo espero ter ajudando, qualquer coisa segue email: rbbarreto@hotmail.com
GOSTEI 0
Rogério Zek
30/04/2015
Olá bom dia colegas, ainda não consegui resolver meu problema, tentei a dica do rbbarreto, mas nada, veja um fragmento do código:
procedure TfrmFornecedores.atualizarCamposFornecedor;
var
item : integer;
begin
item := cbxUFContato.Items.IndexOf(cdsFornecedor.Fields.FieldByName('UF').AsString);
cbxUFContato.ItemIndex := item;
showmessage(inttostr(item));//coloque somente para ver qual seria o item indexado, mas sempre sertorna -1.
verifique o valor do campo da tabela fornecedores, também esta correto.
procedure TfrmFornecedores.atualizarCamposFornecedor;
var
item : integer;
begin
item := cbxUFContato.Items.IndexOf(cdsFornecedor.Fields.FieldByName('UF').AsString);
cbxUFContato.ItemIndex := item;
showmessage(inttostr(item));//coloque somente para ver qual seria o item indexado, mas sempre sertorna -1.
verifique o valor do campo da tabela fornecedores, também esta correto.
GOSTEI 0