Avatar billede juzas Mester
21. marts 2015 - 15:57 Der er 7 kommentarer og
1 løsning

Søg i en listview collone.

Hej. :)
Har en listview med 3 colloner. 1. Adresse 2. Navn 3.By
Hvordan kan jeg med en kode KUN søge i collone 3 (By), med en edit. Det skal os være sådan at når jeg skriver et ord i min edit søger den efter det ordet og sætter focus/Selecter.

Håber nogle kan hjælpe. :)
Avatar billede kroning Nybegynder
21. marts 2015 - 17:18 #1
Avatar billede juzas Mester
21. marts 2015 - 17:48 #2
Hej kroning, har virkelig ikke kunne få det til at virke bruger denne kode:

Min listview hedder (Listview1), og min edit hedder (Edit1)

procedure LV_FindAndSelectItems(lv: TListView; const S: string; column: Integer);
var
  i: Integer;
  found: Boolean;
  lvItem: TListItem;
begin
  Assert(Assigned(lv));
  Assert((lv.ViewStyle = vsReport) or (column = 0));
  Assert(S <> '');
  for i := 0 to lv.Items.Count - 1 do
  begin
    lvItem := lv.Items[i];
    if column = 0 then
      found := AnsiCompareText(lvItem.Caption, S) = 0
    else if column > 0 then
    begin
      if lvItem.SubItems.Count >= Column then
        found := AnsiCompareText(lvItem.SubItems[column - 1], S) = 0
      else
        found := False;
    end
    else
      found := False;
    if found then
    begin
      lv.Selected := lvItem;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  lvItem: TListItem;
begin
  // in der Spalte subitem[0] den Text aus Edit1 suchen
  LV_FindAndSelectItems(Listview1, Edit1.Text, 1);
  ListView1.SetFocus;
end;
Avatar billede kroning Nybegynder
21. marts 2015 - 18:32 #3
Jeg går ud fra at det er hele linien i din ListView1 du vil have selected?

I ObjectSelector sæt:
ListView1.HideSelection=false
og evt. ListView1.RowSelect=true

Og så skal Button1Click se sådan ud (Bemærk 2 i stedet for 1)

procedure TForm1.Button1Click(Sender: TObject);
begin
  LV_FindAndSelectItems(Listview1, Edit1.Text, 2);
end;
Avatar billede juzas Mester
22. marts 2015 - 11:22 #4
Jo det er hele linien i ListView1 collone 3. Det virker stadig ikke. :(

Har skiftet:
ListView1.HideSelection=false
ListView1.RowSelect=true

og den nye kode:
var
  lvItem: TListItem;
begin
  LV_FindAndSelectItems(Listview1, Edit2.Text, 2);
  Listview1.SetFocus;
end;
Avatar billede juzas Mester
22. marts 2015 - 11:38 #5
Har fået det til at virke nu. :)

Men skal skrive hele navnet før den finder den. Vil gerne have hvis man fx skriver (gade) finder den (nøregadevej).
Avatar billede kroning Nybegynder
22. marts 2015 - 15:13 #6
Så kan du bruge Pos i stedet for AnsiCompareText


procedure LV_FindAndSelectItems(lv: TListView; S: string; column: Integer);
var
  i: Integer;
  found: Boolean;
  lvItem: TListItem;
begin
  Assert(Assigned(lv));
  Assert((lv.ViewStyle = vsReport) or (column = 0));
  Assert(S <> '');
  S:=AnsiUpperCase(S);
  for i := 0 to lv.Items.Count - 1 do
  begin
    lvItem := lv.Items[i];
    if column = 0 then
      found := Pos(S, AnsiUpperCase(lvItem.Caption)) > 0
    else if column > 0 then
    begin
      if lvItem.SubItems.Count >= Column then
        found := Pos(S,AnsiUpperCase(lvItem.SubItems[column - 1])) > 0
      else
        found := False;
    end
    else
      found := False;
    if found then
    begin
      lv.Selected := lvItem;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LV_FindAndSelectItems(Listview1, Edit1.Text, 2);
end;
Avatar billede juzas Mester
22. marts 2015 - 18:51 #7
Du sku en klog man kroning! :D
Det virker bare, skriv en kommentar så du kan få dine point.

Du ved vel ik lige til sidst hvordan man vælger den sidste items i min listview? ;)
Avatar billede kroning Nybegynder
23. marts 2015 - 09:06 #8
Den sidste kan vælges således:

  ListView1.Items[ListView1.Items.Count-1].Selected:=true;
  ListView1.Selected.MakeVisible(false);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester