Array
(
)

Combobox em um DBGrid

Leandrosl
   - 29 nov 2005

Pessoal, eu estou tentando colocar um Combobox em um DBGrid, até aí tudo bem, eu tenho um material aqui explicando qual é o procedimento, mais só que é o seguinte, o valor que será mostrado no combobox, não tem um campo especifico na tabela, esse valor será inserido atráves de uma linha de comando que terei que digitar, e no tutorial que tenho, ele fala que tenho que vincular algum campo da tabela para que o valor seja mostrado no Combobox que está no DBGrid. Gostaria de saber sem tem como eu colocar o Combobox no DBGrid sem que ele esteja vinculado a algum campo da minha tabela.

Obrigado


Jairroberto
   - 29 nov 2005

Olá, amigo!

Use a propriedade PickList da coluna do DBGrid para informar as opções desejadas, mantendo a propriedade ButtonStyle dessa mesma coluna com o valor dbsAuto.

Um abraço,
Jair


Leandrosl
   - 29 nov 2005

jair

Coloquei uma linha de comando dentro do PickList, mais ele não me mostro nenhum resultado e também não deu erro,, segue abaixo o codigo que usei:

SELECT MAX(Dataveiculacao) FROM veiculacao
WHERE CodigoVeiculacao=´ DBEditCodveiculacao´

Obrigado


Jairroberto
   - 30 nov 2005

Olá, Leandrosl!

A propriedade PickList é um objeto do tipo TStrings onde você pode descrever as opções que estarão disponíveis para o usuário selecionar. Ela não processa comandos SQL.

Neste caso, você deve usar um Query derivado de DataSet para executar o comando SQL e alimentar o PickList com o resultado. Veja um exemplo imaginando que você utilize DBExpress:

#Código


procedure AlimentarDataVeiculacao(const CodigoVeiculacao: string);
var
DataSet: TSQLQuery;
begin
DataSet := TSQLQuery.Create(Self);
try
DataSet.SQLConnection := SeuObjetoSQLConnection;
DataSet.SQL.Text := Format(´SELECT MAX(Dataveiculacao) FROM veiculacao WHERE CodigoVeiculacao = ¬s´, [QuotedStr(CodigoVeiculacao)]);
DataSet.Open;
if not DataSet.IsEmpty then
DBGrid1.Columns[1].PickList.Text := DataSet.Fields[0].DisplayText
else
DBGrid1.Columns[1].PickList.Text := ´´;
DataSet.Close;
finally
DataSet.Free;
end;
end;


O exemplo considera que:
1) SeuObjetoSQLConnection é um objeto do tipo TSQLConnection utilizado para conexão com o banco de dados via DBExpress;
2) CodigoVeiculacao é um campo do tipo string;
3) DBGrid1 é um objeto do tipo TDBGrid que contém a coluna onde você quer colocar o ComboBox
4) A segunda coluna do DBGrid1 (Columns[1]) é a coluna onde será apresentado o ComboBox com o registro retornado pelo DataSet.

Você pode disparar esse procedimento a partir do evento OnExit do DBEditCodveiculacao, por exemplo:

#Código

procedure DBEditCodveiculacaoExit(Sender: TObject);
begin
AlimentarDataVeiculacao(DBEditCodveiculacao.Text);
end;



Um abraço,
Jair