ListView点某一列排序,急用......

wolf2005 2004-03-24 10:52:04
以前用过的,不记得了

急用......
...全文
90 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolf2005 2004-03-25
  • 打赏
  • 举报
回复
up
zswangII 2004-03-25
  • 打赏
  • 举报
回复
to wolf2005:
一列的实现了~~
多列的你不会自己改改呀?~~

第二个问题,只需要设置FullDrag属性为True即可~~
object ListView1: TListView
FullDrag = True
end
wolf2005 2004-03-25
  • 打赏
  • 举报
回复
你那个可以同时排吗?比方说,先排第一列,然后在第一列的基础上,排第二列
hanlin2004 2004-03-25
  • 打赏
  • 举报
回复
我的那个有4列,随便增加都可以
每一列都可以排序

怕麻烦是吧 呵呵
wolf2005 2004-03-25
  • 打赏
  • 举报
回复
上面的方法,能实现单列排序,

如何实现多列排序?
有没有什么好的方法?

能不能实现列拖放?就象任务管理器那样,可以把第三列拖到第二列显示?

如果能实现上面两功能400分相送...

zswangII 2004-03-24
  • 打赏
  • 举报
回复
//参考如下代码~~
procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
var
I: Integer;
begin
if Abs(TListView(Sender).Tag) = Column.Index + 1 then
TListView(Sender).Tag := -TListView(Sender).Tag
else TListView(Sender).Tag := Column.Index + 1;
TListView(Sender).AlphaSort;

for I := 0 to TListView(Sender).Columns.Count - 1 do begin
TListView(Sender).Columns[I].Caption :=
StringReplace(TListView(Sender).Columns[I].Caption, '↑', '', [rfReplaceAll]);
TListView(Sender).Columns[I].Caption :=
StringReplace(TListView(Sender).Columns[I].Caption, '↓', '', [rfReplaceAll]);
end;
Column.Caption := Column.Caption + Copy(WideString('↓↑'),
Ord(TListView(Sender).Tag > 0) + 1, 1);
end;

procedure TForm1.ListView1Compare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
I: Integer;
A, B: string;
vDataA, vDataB: Extended;
begin
I := TListView(Sender).Tag;
if I = 0 then Exit;
if Abs(I) = 1 then begin
A := Item1.Caption;
B := Item2.Caption;
end else begin
A := Item1.SubItems[Abs(I) - 2];
B := Item2.SubItems[Abs(I) - 2];
end;
if TryStrToFloat(A, vDataA) and TryStrToFloat(B, vDataB) then
Compare := Trunc(I * vDataA - I * vDataB)
else Compare := CompareText(A, B) * I;
end;
hanlin2004 2004-03-24
  • 打赏
  • 举报
回复
var
FrmMain: TFrmMain;
UpDown: array [0..3] of Boolean;


function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer):
integer; stdcall;
begin
case ParamSort of
0:
begin
if UpDown[0] = True then
Result := CompareText(Item1.Caption,Item2.Caption)
else
Result := -CompareText(Item1.Caption,Item2.Caption);
end;
1:
begin
if UpDown[1] = True then
Result := CompareText(Item1.SubItems[0],Item2.SubItems[0])
else
Result := -CompareText(Item1.SubItems[0],Item2.SubItems[0]);
end;
2:
begin
if UpDown[2] = True then
Result := CompareText(Item1.SubItems[1],Item2.SubItems[1])
else
Result := -CompareText(Item1.SubItems[1],Item2.SubItems[1]);
end;
3:
begin
if UpDown[3] = True then
Result := CompareText(Item1.SubItems[2],Item2.SubItems[2])
else
Result := -CompareText(Item1.SubItems[2],Item2.SubItems[2]);
end;
end;
end;


procedure TFrmMain.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
var
I: Integer;
begin
for I := 0 to listview1.Columns.Count - 1 do
listview1.Columns[I].ImageIndex := -1;
listview1.CustomSort(@CustomSortProc,Column.Index);
//升序
{ if UpDown[Column.Index] = True then
Column.ImageIndex := 0
else
//降序
Column.ImageIndex := 1; }
UpDown[Column.Index] := not UpDown[Column.Index];
end;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧