当你设置TListItem的标题时,似乎总是为行中的第一列设置Text。当您开始在ListView中输入时,它将搜索&根据第一列的标题选择最接近的匹配。
我有一种情况,我需要第一行的标题为空,但仍然需要搜索功能正常工作(在这种情况下,我要搜索的数据可能在第2 /第3列)
如果不使用任何第三方控件,这是否可行?
答案 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