listview排序

LOVElonger87 2011-06-01 12:20:13
点击listview列头排序,我点击列头只能从小到大排序,不能从大到小排序。请问是什么回事。
下面是代码
procedure TMainRFrm.TViewRColumnClick(Sender: TObject;
Column: TListColumn);
begin
fColumnToSort := Column.index;
(Sender as TCustomListView).AlphaSort;
end;
下面是 compare事件中case里面的代码,希望各位给我一个好的办法解决问题。
3:
begin
ix := fColumnToSort - 1;
if StrToInt(Item1.SubItems[ix])>StrToInt(Item2.SubItems[ix]) then Compare := 1;
if StrToInt(Item1.SubItems[ix])<StrToInt(Item2.SubItems[ix]) then Compare := -1;
if StrToInt(Item1.SubItems[ix])=StrToInt(Item2.SubItems[ix]) then Compare := 0;
end;
...全文
175 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
likeyrain 2011-06-20
  • 打赏
  • 举报
回复
应该是可以的,
coderee 2011-06-20
  • 打赏
  • 举报
回复
路过。
lyhoo163 2011-06-20
  • 打赏
  • 举报
回复
关注。
虎滴小猪猪 2011-06-16
  • 打赏
  • 举报
回复
//ListView排序的回调函数,默认的是快速排序法,也可以自己在这里做算法
function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
var txt1,txt2 : string;
begin
if ParamSort <> 0 then
begin
txt1 := Item1.SubItems.Strings[ParamSort - 1];
txt2 := Item2.SubItems.Strings[ParamSort - 1];

// if m_bSort then
// begin
// Result := CompareText(txt1,txt2);
// end
// else
// begin
// Result := -CompareText(txt1,txt2);
// end;

if m_bSort then
begin
Result := AnsiCompareText(txt1,txt2);
end
else
begin
Result := -AnsiCompareText(txt1,txt2);
end;


end
else
begin
// if m_bSort then
// begin
// Result := CompareText(Item1.Caption,Item2.Caption);
// end
// else
// begin
// Result := -CompareText(Item1.Caption,Item2.Caption);
// end;
if m_bSort then
begin
Result := AnsiCompareText(Item1.Caption,Item2.Caption);
end
else
begin
Result := -AnsiCompareText(Item1.Caption,Item2.Caption);
end;
end;
end;


procedure TMainForm.rzlvReaderInfoListColumnClick(Sender: TObject;
Column: TListColumn);
begin
rzlvReaderInfoList.CustomSort(@CustomSortProc,Column.Index);
m_bSort := not m_bSort;
end;


CompareText和AnsiCompareText是有区别的。字符集的问题好像。不太记得了。
dropme 2011-06-02
  • 打赏
  • 举报
回复
路过,帮顶,蹭分~
cicidodo 2011-06-02
  • 打赏
  • 举报
回复
m_bSort: boolean= False; //控制正反排序的变量

function CustomSortProc(Item1,Item2: TListItem;ParamSort: Integer): integer; stdcall;
var
txt1,txt2: string;
begin
if ParamSort <> 0 then
begin
try
txt1 := Item1.SubItems.Strings[ParamSort-1];
txt2 := Item2.SubItems.Strings[ParamSort-1];
if m_bSort then
begin
Result := CompareText(txt1,txt2);
end
else
begin
Result := -CompareText(txt1,txt2);
end;
except
end;

end
else
begin
if m_bSort then
begin
Result := CompareText(Item1.Caption,Item2.Caption);
end
else
begin
Result := -CompareText(Item1.Caption,Item2.Caption);
end;
end;
end;



procedure TFrm_Fixed_assets.ListViewFixed_assetsColumnClick(
Sender: TObject; Column: TListColumn);
begin
ListViewFixed_assets.CustomSort(@CustomSortProc,Column.Index);
m_bSort := not m_bSort;
end;
chu_czx444 2011-06-02
  • 打赏
  • 举报
回复
mark
bdmh 2011-06-01
  • 打赏
  • 举报
回复
yabaiking 2011-06-01
  • 打赏
  • 举报
回复
估计SQL 排序问题

5,392

社区成员

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

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