0
以下代碼位將根據TEdit
控件中輸入的內容篩選TListView
控件的項目,並且如果ListView由單個列組成,且列中多於1列然而,當應用過濾器時,其他列中的項會被銷燬,所以我希望有人可能知道需要添加到下面的代碼中以在ListView被過濾時保留這些列。篩選多列列表視圖
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, strutils, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
ListView1: TListView;
Edit1: TEdit;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
StrList : TStringList;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Index : Integer;
begin
StrList := TStringList.Create;
for Index := 0 to ListView1.Items.Count -1 do
StrList.Add(ListView1.Items[Index].Caption);
end;
procedure TForm1.Edit1Change(Sender: TObject);
var
Index : Integer;
begin
ListView1.Clear;
for Index := 0 to StrList.Count - 1 do
if Pos(Edit1.Text, StrList.Strings[Index]) > 0 then
ListView1.AddItem(StrList.Strings[Index], nil);
if Edit1.Text = '' then
for Index := 0 to StrList.Count - 1 do
ListView1.AddItem(StrList.Strings[Index], nil);
end;
end.
不聽起來像是要一排過濾器顯然是包含或排除的行。看起來很喜歡你想在單元格中粘貼一個空白值,如果它不匹配。如果沒有任何列匹配,也許不要添加行... – 2012-07-28 14:34:43
或者你也許可以測試每一列,並且如果它們中的任何一列匹配添加該行,他在經過一段時間的思考後說。更好的是,你將行中的數據和過濾器傳遞給一個布爾函數,並且如果是true,那麼將是更自然的方法。 – 2012-07-28 14:37:59
對不起,我不太理解你的回答。你會再試一次嗎?感謝您的答覆btw。我所要做的就是創建一個像DBgrid一樣的過濾器,但不是使用Dataset的網格,而是簡單地使用ListView和編輯控件。 – avue 2012-07-28 14:38:35