busca em um listview
queria saber como fazer busca no listview com multidetail. Carrego os dados da tabela para o listview assim:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
itemadd: TListViewItem;
begin
Lst_Cliente.Items.Clear;
Lst_Cliente.BeginUpdate;
dm.ClientDataSet1.Close;
dm.ClientDataSet1.Open;
dm.ClientDataSet1.First;
while not dm.ClientDataSet1.eof do
begin
itemadd:= Lst_Cliente.Items.Add;
itemadd.Detail:= dm.ClientDataSet1CLIENTEID.AsString;
itemadd.Text:= 'Razão: '+dm.ClientDataSet1RAZAO.AsString;
itemadd.Data[TMultiDetailAppearanceNames.Detail1] := 'Fantasia: '+dm.ClientDataSet1FANT.AsString;
itemadd.Data[TMultiDetailAppearanceNames.Detail2] := 'Endereço: '+dm.ClientDataSet1ENDERECO.AsString +' ' + dm.ClientDataSet1NUMERO.AsString;
itemadd.Data[TMultiDetailAppearanceNames.Detail3] := 'Numero: '+dm.ClientDataSet1NUMERO.AsString;
dm.ClientDataSet1.Next;
end;
Lst_Cliente.EndUpdate;
dm.ClientDataSet1.Close;
end;
queria colocar um combobox e u edit quando estiver selecionado 'clienteid', 'razao', 'fantasia', 'endereço' e digitando em um edit ou no proprio search do listview ele filtrava por esse campo.
so nao tenho a menor ideia de como fazer......
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
itemadd: TListViewItem;
begin
Lst_Cliente.Items.Clear;
Lst_Cliente.BeginUpdate;
dm.ClientDataSet1.Close;
dm.ClientDataSet1.Open;
dm.ClientDataSet1.First;
while not dm.ClientDataSet1.eof do
begin
itemadd:= Lst_Cliente.Items.Add;
itemadd.Detail:= dm.ClientDataSet1CLIENTEID.AsString;
itemadd.Text:= 'Razão: '+dm.ClientDataSet1RAZAO.AsString;
itemadd.Data[TMultiDetailAppearanceNames.Detail1] := 'Fantasia: '+dm.ClientDataSet1FANT.AsString;
itemadd.Data[TMultiDetailAppearanceNames.Detail2] := 'Endereço: '+dm.ClientDataSet1ENDERECO.AsString +' ' + dm.ClientDataSet1NUMERO.AsString;
itemadd.Data[TMultiDetailAppearanceNames.Detail3] := 'Numero: '+dm.ClientDataSet1NUMERO.AsString;
dm.ClientDataSet1.Next;
end;
Lst_Cliente.EndUpdate;
dm.ClientDataSet1.Close;
end;
queria colocar um combobox e u edit quando estiver selecionado 'clienteid', 'razao', 'fantasia', 'endereço' e digitando em um edit ou no proprio search do listview ele filtrava por esse campo.
so nao tenho a menor ideia de como fazer......
Nei
Curtidas 0
Respostas
Rafael Bosco
16/10/2015
Como você está fazendo o controle dos itens do ListView? Através de um INDEX ? Se sim, vou passar uma forma meio lógica, aí é só fazer umas alterações:
procedure SearchByListView(const Locate: String; Filter: System.Char; ListView: TListView);
var
I: System.Integer;
function Equals: String;
begin
if Filter = 'C' then //se for pesquisar pelo CLIENTEID
Result := ListView.Items[I].Caption
else
Result := ListView.Items[I].SubItems[0]; //se não, procura pela FANTASIA (da pra fazer um CASE aqui se tiver mais condições)
end
begin
for I := 0 to ListView.Items.Count -1 do
begin
if ((Pos(Locate, Equals) > 0) or (Locate = '')) then
begin
ListView.ItemIndex := I;
ListView.Items[I].MakeVisible(True);
Break;
end;
end;
end;
GOSTEI 0