社区
C++ Builder
帖子详情
请问如何在listview中,对column做排序。
wsf
2003-10-21 11:04:02
我用的是bcb5
...全文
36
8
打赏
收藏
请问如何在listview中,对column做排序。
我用的是bcb5
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yjy1001
2003-10-21
打赏
举报
回复
你是要对列排序还是对行排序?
你还没有描述清楚问题呢
sfemil
2003-10-21
打赏
举报
回复
在窗体类中定义变量 int m_iColumnToSort
在listview的 OnColumnClick事件
m_iColumnToSort = Column->Index;
//排序方式
if(Column->Tag == otAsc) Column->Tag = otDesc;
else Column->Tag = otAsc;
TListView* pCurListView = (TListView*)Sender;
pCurListView->Items->BeginUpdate();
pCurListView->AlphaSort();
pCurListView->Items->EndUpdate();
在listview的 OnCompare 事件
if (m_iColumnToSort == 0)
Compare = CompareText(Item1->Caption,Item2->Caption);
else
{
int ix = m_iColumnToSort - 1;
Compare = CompareText(Item1->SubItems->Strings[ix], Item2->SubItems->Strings[ix]);
}
TListColumn* pCurLstColumn = ((TListView*)Sender)->Columns->Items[m_iColumnToSort];
if((ORDERTYPE)pCurLstColumn->Tag == otDesc)
{
Compare = -Compare;
}
说明:其中 ORDERTYPE是我自己定义的排序类别枚举变量
包含三个数值
otNone = 0,otAsc,otDesc
大致就是这样 看你是否可以编译通过,我经常使用。
ccrun.com
2003-10-21
打赏
举报
回复
没搞懂。你是要对列排序还是对行排序?
wsf
2003-10-21
打赏
举报
回复
楼上的,不行。我的意思是点击某列时,会排序
netsys2
2003-10-21
打赏
举报
回复
ListView1->SortType = stBoth;
wsf
2003-10-21
打赏
举报
回复
谢谢大家
hatumei
2003-10-21
打赏
举报
回复
来晚了,投个赞成票,同意sfemil(书生)
pzoon
2003-10-21
打赏
举报
回复
你要做什么
VB.NET
ListView
排序
类
一个用来
排序
ListView
的类 以下需要在
Listview
的标题单击事件
中
加入 Private m_Sorting
Column
As
Column
Header Private Sub
ListView
1_
Column
Click(ByVal sender As Object, ByVal e As System.Windows.Forms.
Column
ClickEventArgs) Handles
ListView
1.
Column
Click Dim new_sorting_
column
As
Column
Header = sender.
Column
s(e.
Column
) Dim sort_order As System.Windows.Forms.SortOrder If m_Sorting
Column
Is Nothing Then sort_order = SortOrder.Ascending Else If new_sorting_
column
.Equals(m_Sorting
Column
) Then If m_Sorting
Column
.Text.EndsWith(" △") Then sort_order = SortOrder.Descending Else sort_order = SortOrder.Ascending End If Else sort_order = SortOrder.Ascending End If m_Sorting
Column
.Text = m_Sorting
Column
.Text.Substring(0, m_Sorting
Column
.Text.Length - 3) End If m_Sorting
Column
= new_sorting_
column
'重新显示列标题 If sort_order = SortOrder.Ascending Then m_Sorting
Column
.Text &= " △" Else m_Sorting
Column
.Text &= " ▽" End If sender.
ListView
ItemSorter = New Cls
ListView
Sorter(e.
Column
, sort_order) sender.Sort() sender.
ListView
ItemSorter = Nothing End Sub
A Multi
Column
Sort
listview
一个多列
排序
的列表视图(37KB)
A Multi
Column
Sort
listview
一个多列
排序
的列表视图(37KB)
listview
基本用法
Delphi
ListView
基本用法大全(转)默认分类 2009-09-29 09:27:56 阅读138 评论0 字号:大
中
小 订阅 Delphi高级编程 Delphi文章 WEB开发 Delphi控件 Delphi
ListView
基本用法大全 作者:seeker 日期:2009-04-19 //增加项或列(字段)
ListView
1.Clear;
ListView
1.
Column
s.Clear;
ListView
1.
Column
s.Add;
ListView
1.
Column
s.Add;
ListView
1.
Column
s.Add;
ListView
1.
Column
s.Items[0].Caption:='id';
ListView
1.
Column
s.Items[1].Caption:='type';
ListView
1.
Column
s.Items[2].Caption:='title';
ListView
1.
Column
s.Items[2].Width:=300;
Listview
1.ViewStyle:=vsreport;
Listview
1.GridLines:=true; //注:此处代码也可以直接在可视化编辑器
中
完成, 也可写成以下这样 begin with
listview
1 do begin
Column
s.Add;
Column
s.Add;
Column
s.Add; ViewStyle:=vsreport; GridLines:=true;
column
s.items[0].caption:='进程名';
column
s.items[1].caption:='进程ID';
column
s.items[2].caption:='进程文件路径';
Column
s.Items[0].Width:=100;
Column
s.Items[1].Width:=100;
Column
s.Items[2].Width:=150; end end; //增加记录 with
listview
1.items.add do begin caption:='1212'; subitems.add('hh1'); subitems.add('hh2'); end; //删除
listview
1.items.delete(0); //从数据库表里读取数据写入
Listview
var Titem:Tlistitem; //此处一定要预定义临时记录存储变量. begin
ListView
1.Items.Clear; with adoquery1 do begin close; sql.Clear; sql.Add('select spmc,jg,sl from kcxs'); Open;
ListView
1.Items.Clear; while not eof do begin Titem:=
ListView
1.Items.add; Titem.Caption:=FieldByName('spmc').Value; Titem.SubItems.Add(FieldByName('sl').Value); Titem.SubItems.Add(FieldByName('jg').Value); next; end; //删除
ListView
1.DeleteSelected; //如何取得
ListView
中
选
中
行的某一列的值 procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage(
ListView
1.Selected.SubItems.Strings[1]); //返回选
中
行第三列
中
的值 end; showMessage(
listView
1.Selected.Caption); //返回选
中
行第一列的值. 第1列的值: -->>>
ListView
1.Selected.Caption 第i列的值(i>1):-->>>
ListView
1.Selected.SubItems.Strings[i]
ListView
1.Items.Item[1].SubItems.GetText); //取得
listview
某行某列的值 Edit2.Text :=
listview
1.Items[i].SubItems.strings[0]; //读第i行第2列 返回选
中
行所有子列值.是以回车符分开的,你还要从
中
剥离出来你要的子列的值。 showMessage(
ListView
1.Selected.SubItems.GetText);
ListView
简单
排序
的实现
ListView
排序
怎样实现单击一下按升序,再单击一下按降序。 function CustomSortProc(Item1, Item2: TListItem;
Column
Index: integer): integer; stdcall; begin if
Column
Index = 0 then Result := CompareText(Item1.Caption,Item2.Caption) else Result := CompareText(Item1.SubItems[
Column
Index-1],Item2.SubItems[
Column
Index-1]) end; procedure TFrmSrvrMain.
ListView
1
Column
Click(Sender: TObject;
Column
: TList
Column
); begin
ListView
1.CustomSort(@CustomSortProc,
Column
.Index); end; =============================================================== //增加 i :=
ListView
1.Items.Count; with
ListView
1 do begin ListItem:=Items.Add; ListItem.Caption:= IntToStr(i); ListItem.SubItems.Add('第 '+IntToStr(i)+' 行'); ListItem.SubItems.Add('第三列内容'); end; //按标题删除 for i:=
ListView
1.Items.Count-1 downto 0 Do if
ListView
1.Items[i].Caption = Edit1.Text then begin
ListView
1.Items.Item[i].Delete(); //删除当前选
中
行 end; //选
中
一行 if
ListView
1.Selected <> nil then Edit1.Text :=
ListView
1.Selected.Caption; //
listview
1.Items[
Listview
1.Items.Count -1].Selected := True; //
listview
1.Items[
Listview
1.Items.Count -1].MakeVisible(True); procedure TForm1.Button2Click(Sender: TObject); // 选择第一条 begin
listview
1.SetFocus;
listview
1.Items[0].Selected := True; end; procedure TForm1.Button1Click(Sender: TObject); // 选择最后一条 begin
listview
1.SetFocus;
listview
1.Items[
Listview
1.Items.Count -1].Selected := True; end; //这是个通用的过程 procedure
ListView
ItemMoveUpDown(lv : T
ListView
; Item : TListItem; MoveUp, SetFocus : Boolean); var DestItem : TListItem; begin if (Item = nil) or ((Item.Index - 1 < 0) and MoveUp) or ((Item.Index + 1 >= lv.Items.Count) and (not MoveUp)) then Exit; lv.Items.BeginUpdate; try if MoveUp then DestItem := lv.Items.Insert(Item.Index - 1) else DestItem := lv.Items.Insert(Item.Index + 2); DestItem.Assign(Item); lv.Selected := DestItem; Item.Free; finally lv.Items.EndUpdate; end; if SetFocus then lv.SetFocus; DestItem.MakeVisible(False); end; //此为调用过程,可以任意指定要移动的Item,下面是当前(Selected)Item
ListView
ItemMoveUpDown(
ListView
1,
ListView
1.Selected, True, True);//上移
ListView
ItemMoveUpDown(
ListView
1,
ListView
1.Selected, False, True);//下移 T
ListView
组件使用方法 引用CommCtrl单元 procedure TForm1.Button1Click(Sender: TObject); begin
ListView
_Delete
Column
(My
ListView
.Handle, i);//i是要删除的列的序号,从0开始 end; 用
LISTVIEW
显示表
中
的信息: procedure viewchange(listv:t
listview
;table:tcustomadodataset;var i:integer); begin t
listview
(listv).Items.BeginUpdate; {listv:
listview
名} try t
listview
(listv).Items.Clear; with table do {table or query名} begin active:=true; first; while not eof do begin listitem:=t
listview
(listv).Items.add; listitem.Caption:=trim(table.fields[i].asstring); // listitem.ImageIndex:=8; next; end; end; finally t
listview
(listv).Items.EndUpdate; end; end;
ListView
使用
中
的一些要点。以下以一个两列的
ListView
为例。 →增加一行: with
ListView
1 do begin ListItem:=Items.Add; ListItem.Caption:='第一列内容'; ListItem.SubItems.Add('第二列内容'); end; →清空
ListView
1:
ListView
1.Items.Clear; →得到当前被选
中
行的行的行号以及删除当前行: For i:=0 to
ListView
1.Items.Count-1 Do If
ListView
1.Items[i].Selected then //i=
ListView
1.Selected.index begin
ListView
1.Items.Delete(i); //删除当前选
中
行 end; 当然,
ListView
有OnSelectItem事件,可以判断选择了哪行,用个全局变量把它赋值出来。 →读某行某列的操作: Edit1.Text :=
listview
1.Items[i].Caption; //读第i行第1列 Edit2.Text :=
listview
1.Items[i].SubItems.strings[0]; //读第i行第2列 Edit3.Text :=
listview
1.Items[i].SubItems.strings[1]; //读第i行第3列 以次类推,可以用循环读出整列。 →将焦点上移一行: For i:=0 to
ListView
1.Items.Count-1 Do If (
ListView
1.Items[i].Selected) and (i>0) then begin
ListView
1.SetFocus;
ListView
1.Items.Item[i-1].Selected := True; end; 不过在Delphi6
中
,
ListView
多了一个ItemIndex属性,所以只要
ListView
1.SetFocus;
ListView
1.ItemIndex:=3; 就能设定焦点了。 Delphi的
listview
能实现交替颜色么? procedure TForm1.
ListView
1CustomDrawItem( Sender: TCustom
ListView
; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var i: integer; begin i:= (Sender as T
ListView
).Items.IndexOf(Item); if odd(i) then sender.Canvas.Brush.Color:= $02E0F0D7 else sender.Canvas.Brush.Color:= $02F0EED7; Sender.Canvas.FillRect(Item.DisplayRect(drIcon)); end; 要想随时更改
ListView
中
某一行的字体颜色,要在
ListView
的 OnCustomDrawItem 的事件
中
书写相关的代码。例如 我想更改选
中
的某行字体的颜色,则需要在事件
中
写入下的代码: if item.Index = strtoint(edit1.Text) then //该条件是用于判断是否符合更改字体颜色的行的条件。 Sender.Canvas.Font.Color := clred;
listview
排序
ListView
my
ListView
= (
ListView
)sender; // Determine if clicked
column
is already the
column
that is being sorted. if ( e.
Column
== lvw
Column
Sorter.Sort
Column
) { // Reverse the current sort direction for this
column
. if (lvw
Column
Sorter.Order == SortOrder.Ascending) { lvw
Column
Sorter.Order = SortOrder.Descending; } else { lvw
Column
Sorter.Order = SortOrder.Ascending; } } else { // Set the
column
number that is to be sorted; default to ascending. lvw
Column
Sorter.Sort
Column
= e.
Column
; lvw
Column
Sorter.Order = SortOrder.Ascending; } // Perform the sort with these new sort options. my
ListView
.Sort();
ListView
实现A-Z
排序
从Android手机
中
得到通讯录联系人的数据,并且实现A-Z
排序
和搜索过滤
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章