是否可以通过Delphi中不同列的标题进行TListView搜索?

时间:2010-06-08 13:34:00

标签: delphi listview

当你设置TListItem的标题时,似乎总是为行中的第一列设置Text。当您开始在ListView中输入时,它将搜索&根据第一列的标题选择最接近的匹配。

我有一种情况,我需要第一行的标题为空,但仍然需要搜索功能正常工作(在这种情况下,我要搜索的数据可能在第2 /第3列)

如果不使用任何第三方控件,这是否可行?

2 个答案:

答案 0 :(得分:1)

根据您希望标题/第一列为空的原因,您可以将要搜索的文本移动到标题中,然后使用空白子项。然后在代码中交换列顺序

//Move the 1st sub-item left one column
ListView1.Columns[1].Index := 0;

这看起来几乎相同,但如果您没有将RowSelect设置为true,则突出显示的标题将位于错误的列中。这将允许您根据需要进行搜索并在代码中使用FindCaption方法。

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
  li : TListItem;
begin
    //Add data to the list view for demo
    for I := 0 to 10 do
    begin
           li := ListView1.Items.Add;    
           li.Caption := intToStr(Random(10000));
           li.SubItems.Add('');
           li.SubItems.Add('Col2');

           //addimages so you can see which column is which
           li.SubItemImages[0] := 0;
           li.ImageIndex := -1;
    end;

    //move column 2 left one, this is the important bit
    ListView1.Columns[1].Index := 0;
end;

alt text http://img265.imageshack.us/img265/3489/captureqg.jpg

答案 1 :(得分:0)

如果它绑定到数据集,那么您可以进行自己的搜索,然后将数据集光标移动到所需的行。我只是做了其中一个。

更新:使用OnCompare处理程序,并根据您想要的任何条件进行自己的比较。即你要决定item1< item2与否。

这是一篇很好的文章: http://www.latiumsoftware.com/en/delphi/00011.php