Array
(
)

Como saber se existe registro em TValueListEditor?

Onjahyr
   - 29 mar 2006

Olá Pessoal.

Antes de iniciar, quero dizer a todos que este componente não tem items.count não, portanto, um for i ... não tem como fazer :(

Eu queria saber se existe algum dado dentro deste componente, se não existir, quero desabilitar o botão1, caso contrário quero habilitar o botão1
------------------

Bom, para inserir um dado eu fiz assim:

procedure ...
begin
__ValueListEditor1.InsertRow(´texto da primeira coluna´,´texto da segunda coluna´,True);
end;

Aguardo a ajuda de vocês, estou precisando muito dessa ajuda!

Falowww


Vinicius2k
   - 29 mar 2006

Colega,

Dois exemplos de como ´encontrar´ chaves e valores de chaves no TValueListEditor:
#Código

{ ... }
var
Linha: Integer;
begin
if ValueListEditor1.FindRow(´SuaChave1´, Linha) then
ShowMessage(´A chave "SuaChave" está presente na linha ´ + IntToStr(Linha))
else
ShowMessage(´A chave "SuaChave" não existe.´);
end;

{ ... }
var
Valor: string;
begin
Valor := ValueListEditor1.Values[´SuaChave´];
if Valor <> ´´ then
ShowMessage(´O valor de "SuaChave" é ´ + Valor)
else
ShowMessage(´"SuaChave" não possui valor.´)
end;


T+


Rilder
   - 30 mar 2006

Olá Vinícius,

Desta maneira que você colocou realmente funciona, porém, o programador tem que informar o nome de uma das chaves. Se você não sabe qual a chave que se encontra lá?

POR EXEMPLO:

Segundo o companheiro que colocou a dúvida, ele quer saber se existe um registro lá! para depois habilitar ou não um determinado botão.

Digamos que o componente em questão não tem nenhum dado, com um botão eu incluo um registro conforme o código que ele citou que insere. Aí, ele tem outro botão que apaga os dados de dentro, e quando não encontrar nenhum registro lá dentro ele deseja desabilitar este botão, então, como saber se ainda tem registro dentro????

Essa também é minha dúvida!

Obrigado.


Vinicius2k
   - 30 mar 2006

Creio que interpretei de forma equivocada a questão...

Se a necessidade é apenas saber se existe ou não algum dado, bastaria ler a propriedade RowCount (subtraindo 1 se as colunas possuirem título).


Onjahyr
   - 31 mar 2006

Não funciona, já fiz isso também!
Parece que este componente fica com um registro nulo, toda vez quando faço o laço for, ele diz que existe um registro lá, mas não tem nada!
Se tem 3 registros, ele diz que tem 3, se 2, tem 2, se 1, tem 1, se 0, diz que tem 1. Sempre tem um!!!!!!

Existe outra função?

Eu tô colocando assim:

Alias, já fiz de várias formas e não surtiu efeito:

procedure Tfrm_CreateUser.Button1Click(Sender: TObject);
var
__i : integer;
begin
__for i := ValueListEditor1.RowCount -1 downto 0 do
____begin
______if i <= 0 then
________ShowMessage(IntToStr(i))
_______else
________ShowMessage(´Oi´);
____end;
end;

coloquei:

for i := 0 to ValueListEditor1.RowCount -1 do

...

Aguardo.... Agradecido pela colaboração.


Vinicius2k
   - 31 mar 2006

Colega,

Como eu disse, se a as colunas contiverem títulos, sempre haverá uma linha: a linha do título.
Para ter a contagem correta, precisa-se subtrair 1.


Onjahyr
   - 31 mar 2006

É Verdade Vinícius, vi depois! mas resolvi dessa forma também:

procedure Tfrm_CreateUser.Button1Click(Sender: TObject);
var
__i : integer;
__S,S2 : String;
begin
__for i:= 1 to Pred(ValueListEditor1.RowCount) do
___begin
_____S2:= ValueListEditor1.Keys[i];
_____S := ValueListEditor1.Values[S2];
_____if S = ´´ then
______btRemover1.Enabled:=False; // Visto que não pode haver valores null
___end;
end;


Onjahyr
   - 31 mar 2006

Vinícius, agradeço pela ajuda. Abriu a cabeça para pensar melhor.

Falowww


Robson