递增排序的做法我已经知道了,那么两次点击列按钮分别按递增和递减的顺序,同时有一个改变方向的三角形小图标,请问如何能够实现?
解决方案 »
- 软件选择delphi-labview
- 高分问一个批量复制文件的问题,欢迎接分
- interbase数据库的问题,回答了我给100分?
- 怎样制作数据库安装程序???
- 有没有人知道这个病毒怎么杀呀~~~~~~~~~~~~~~~
- 当打印多页报表时,统计每一页的数量总和
- 急!急!delphi 利用socket多线程下载文件
- ini文件中我想写入一个空行,请指教, 谢谢!
- 请问谁有雨痕注册过的XPRAIN(http://rainsoft.diy.163.com/),发一份给我啊!
- delphi 添加字段报错
- 怎么在Service Application中抓屏幕截图。
- 搜索了以往的帖子,但没有结果,关于dll调用ado问题。搞了一天,我要吐血了
procedure DBGrid1TitleClick(Column: TColumn);
var
i,j,k,ii:integer;
CurrentTitle,ls01:string;
SQL_OrderString:string;
TosetColor:Tcolor;
ColumnIndex:integer;
strSortFashion:Boolean;
begin
IF not Table1.Exists then
exit;
//查询语句
ls01:='select * from NewDbProductSaleSort ';
ToSetColor:=clBtnFace;
Columnindex:=Column.Index;
CurrentTiTle:=Trim(Column.TiTle.Caption);
k:=DBGrid1.Columns.Count-1;
for i:=0 to k do
begin
if DBGrid1.Columns[i]<>Column then //如非当前点击字段,则复原标题和颜色
begin
DBGrid1.columns[i].Title.Color:=clBtnFace;
Column.Title.Color:=ToSetColor;
j:=Pos('↑',trim(DBGrid1.Columns[i].Title.Caption));
if j>0 then DBGrid1.Columns[i].Title.Caption:=Copy(trim(DBGrid1.Columns[i].Title.Caption),1,j-1);
j:=Pos('↓',trim(DBGrid1.Columns[i].Title.Caption));
if j>0 then DBGrid1.Columns[i].Title.Caption:=Copy(trim(DBGrid1.Columns[i].Title.Caption),1,j-1);
end;
end;
j:=Pos('↓',CurrentTitle); //判断是否顺排: J=0,没有顺排,j=1 当前已顺排
k:=Pos('↑',CurrentTitle); //判断是否逆排: k=0,没有逆排,k=1 当前已逆排
if j+k=0 then //如没有排序,则顺排
begin
if (UPPERCASE(Column.FieldName)='XH') or (UPPERCASE(Column.FieldName)='PRODUCTID') or (UPPERCASE(Column.FieldName)='PRODUCTNAME') then
SQL_OrderString:=ls01+ ' Order By SaleNumber '
else
SQL_OrderString:=ls01+ ' Order By '+Column.FieldName;
ToSetColor:=$00A6cadf;
Column.Title.Caption:=CurrentTitle+'↓' ;
strSortFashion:=false;
end
else
begin
if j>0 then //如已顺排,则逆排
begin
if (UPPERCASE(Column.FieldName)='XH') or (UPPERCASE(Column.FieldName)='PRODUCTID') or (UPPERCASE(Column.FieldName)='PRODUCTNAME') then
SQL_OrderString:=ls01+ ' Order By SaleNumber desc'
else
SQL_OrderString:=ls01+ ' Order By '+Column.FieldName+' Desc';
ToSetColor:=$00A6cadf;
Column.Title.Caption:=Copy(CurrentTitle,1,j-1)+'↑';
strSortFashion:=True;
end
else //如已逆排,则恢复自然顺序
begin
strSortFashion:=true;
SQL_OrderString:=ls01+' Order By SaleNumber desc';
ToSetColor:=clBtnFace;
Column.Title.Caption:=Copy(CurrentTitle,1,k-1);
end;
end;
CurrentQuery.Close; //关闭当前query
CurrentQuery.SQL.Clear; //清除SQL语名
CurrentQuery.SQL.Add(SQL_OrderString);
// DataSource1.DataSet:=CurrentQuery;
CurrentQuery.Open;
Table1.Close;
Table1.BatchMove(CurrentQuery,batcopy);
Table1.Open;
Table1.DisableControls;
if strSortFashion then
begin
Table1.First;
ii:=1;
while not Table1.Eof do
begin
Table1.Edit;
Table1.FieldByName('xh').AsInteger:=ii;
Table1.Post;
inc(ii);
Table1.Next;
end;
end
else
begin
Table1.Last;
ii:=1;
while not Table1.Bof do
begin
Table1.Edit;
Table1.FieldByName('xh').AsInteger:=ii;
Table1.Post;
inc(ii);
Table1.Prior;
end;
end;
Table1.First;
Table1.EnableControls;
dbgrid1.Columns[columnindex].Title.Color:=ToSetColor;
end;
function ListViewRowSort(mListView: TListView; mByte: integer; mDesc: Boolean =
False): Boolean;
function ListViewRowSwap(mListView: TListView; mFromRow, mToRow: Integer):
Boolean;
var
S: string;
begin
Result := False;
if (mToRow = mFromRow) then
Exit;
if not Assigned(mListView) then
Exit;
if (mFromRow < 0) or (mFromRow >= mListView.Items.Count) then
Exit;
if (mToRow < 0) or (mToRow >= mListView.Items.Count) then
Exit;
try
S := mListView.Items.Item[mFromRow].Caption;
mListView.Items.Item[mFromRow].Caption :=
mListView.Items.Item[mToRow].Caption;
mListView.Items.Item[mToRow].Caption := S;
except
Exit;
end;
Result := True;
end;
var
I, J: Integer;
begin
Result := False;
if not Assigned(mListView) then
Exit;
for I := 0 to mListView.Items.Count - 2 do
for J := I + 1 to mListView.Items.Count - 1 do
if mDesc then
if RightStr(mListView.Items.Item[I].Caption, mByte) <
RightStr(mListView.Items.Item[J].Caption, mByte) then
ListViewRowSwap(mListView, I, J)
else
else if RightStr(mListView.Items.Item[I].Caption, mByte) >
RightStr(mListView.Items.Item[J].Caption, mByte) then
ListViewRowSwap(mListView, I, J);
Result := True;
end;
参数说明:依次为:ListView,从第几位开始排序,正反排序
CommCtrl;var
ColumnToSort: Integer; //全局变量,判断listview列的顺序,用于排序
SortStyle: Boolean = true; //控制排序方向的全局变量procedure ShowHeaderIcon;
var
h:THandle;
i:Integer;
hi:THDItem;
begin
h := GetDlgItem(Handle, 0); //get Header Handle
for i := 0 to Columns.Count - 1 do
begin
hi.mask := HDI_FORMAT;
Header_GetItem(h,i, hi);
hi.mask := HDI_FORMAT;
hi.fmt := hi.fmt or HDF_BITMAP_ON_RIGHT;
Header_SetItem(h,i, hi);
end;
end;procedure ListViewOnColumnClick(Sender: TObject; Column: TListColumn);
begin
ColumnToSort := Column.Index;
(Sender as TCustomListView).AlphaSort;
SortStyle := not SortStyle;
end;procedure ListViewOnCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
ix,I: Integer;
begin
if ColumnToSort = 0 then
Compare := CompareText(Item1.Caption,Item2.Caption)
else begin
ix := ColumnToSort - 1;
Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
end;
if SortStyle then
begin
Compare:=-Compare;
if ColumnToSort > 2 then
Column[ColumnToSort].ImageIndex := 8;
end
else
if ColumnToSort > 2 then
Column[ColumnToSort].ImageIndex := 7;
ShowHeaderIcon; //箭头出现在标题右侧
end;