数据窗口列标题的排序!!!

bllj 2003-05-19 07:02:48
一个GRID形式的数据窗口,怎么样通过点击列标题进行升降排序??
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengzeng 2003-05-19
  • 打赏
  • 举报
回复
通用实例,数据窗口对象:
$PBExportHeader$uo_dwsort.sru
$PBExportComments$Datawindow userobject with sort functionality
forward
global type uo_dwsort from datawindow
end type
end forward

global type uo_dwsort from datawindow
integer width = 1303
integer height = 904
integer taborder = 2
string dragicon = "dragrec.ico"
boolean livescroll = true
borderstyle borderstyle = stylelowered!
end type
global uo_dwsort uo_dwsort

type prototypes

end prototypes

type variables
Public:
boolean MultiSelect = False
long LastRow
integer ii_ShowStatus = 50

Private:
string is_OrderCol, is_SortType = "D"
boolean ib_Arrows = False, ib_MouseDown = False, ib_Selected = False
end variables

forward prototypes
public subroutine of_des (integer ai_linepos)
public subroutine of_asc (integer ai_linepos)
end prototypes

public subroutine of_des (integer ai_linepos);//销毁

this.modify("destroy l_arrowLine_1")
this.modify("destroy l_arrowLine_2")
this.modify("destroy l_arrowLine_3")

//创建
string ls_addLin
ls_addLin ="create line(band=Foreground x1='"+string(ai_linePos)+"' y1='24' x2='"+string(ai_linePos - 32)+"' y2='52' name=l_arrowLine_1 pen.color='" + string(RGB(0,0,0)) + "')"
this.modify(ls_addLin)
ls_addLin ="create line(band=Foreground x1='"+string(ai_linePos)+"' y1='24' x2='"+string(ai_linePos + 32)+"' y2='52' name=l_arrowLine_3 pen.color='" + string(RGB(255,255,255)) + "')"
this.modify(ls_addLin)
ls_addLin ="create line(band=Foreground x1='"+string(ai_linePos + 27)+"' y1='48' x2='"+string(ai_linePos - 27)+"' y2='48' name=l_arrowLine_2 pen.color='" + string(RGB(255,255,255)) + "')"
this.modify(ls_addLin)


end subroutine

public subroutine of_asc (integer ai_linepos);//销毁箭头图形
this.modify("destroy l_arrowLine_1")
this.modify("destroy l_arrowLine_2")
this.modify("destroy l_arrowLine_3")

//创建升序的箭头图形
string ls_addLin
ls_addLin ="create line(band=Foreground x1='"+string(ai_linePos)+"' y1='24' x2='"+string(ai_linePos - 50)+"' y2='24' name=l_arrowLine_1 pen.color='" + string(RGB(0,0,0)) + "')"
this.modify(ls_addLin)
ls_addLin ="create line(band=Foreground x1='"+string(ai_linePos + 5)+"' y1='24' x2='"+string(ai_linePos - 27)+"' y2='52' name=l_arrowLine_3 pen.color='" + string(RGB(255,255,255)) + "')"
this.modify(ls_addLin)
ls_addLin ="create line(band=Foreground x1='"+string(ai_linePos - 50)+"' y1='24' x2='"+string(ai_linePos - 23)+"' y2='48' name=l_arrowLine_2 pen.color='" + string(RGB(0,0,0)) + "')"
this.modify(ls_addLin)


end subroutine

on uo_dwsort.create
end on

on uo_dwsort.destroy
end on

event doubleclicked;//点击列头排序改进代码(不使用箭头图片,可随意改变列头的颜色)

//排序
string ls_CurObj, ls_CurCol
integer li_LinePos

ls_CurObj = String(dwo.Name)
li_LinePos = Integer(This.Describe(ls_CurObj + ".X"))+ (Integer(This.Describe(ls_CurObj + ".Width")) - 20)

If Row = 0 AND This.Describe(ls_CurObj + ".Text") <> "!" AND This.Describe(ls_CurObj + ".Band") = "header" Then // Valid header object?
ls_CurCol = Left(ls_CurObj,Len(ls_CurObj) - 2)
If is_OrderCol <> ls_CurCol Then
is_OrderCol = Left(ls_CurObj,Len(ls_CurObj) - 2)
of_asc(li_linePos)
is_SortType = "A"
This.SetSort(is_OrderCol + " " + is_SortType)
This.Sort()
Else
If is_SortType = "A" Then
li_LinePos -= 20
of_des(li_LinePos)
is_SortType = "D"
Else
of_asc(li_LinePos)
is_SortType = "A"
End If
This.SetSort(is_OrderCol + " " + is_SortType)
This.Sort()
End If
End If



//原代码

//string ls_AddPict, ls_CurObj, ls_Picture, ls_CurCol
//integer li_PictPos
//
//ls_CurObj = String(dwo.Name)
//If Row = 0 AND This.Describe(ls_CurObj + ".Text") <> "!" AND This.Describe(ls_CurObj + ".Band") = "header" Then // Valid header object?
// ls_CurCol = Left(ls_CurObj,Len(ls_CurObj) - 2)
// If is_OrderCol <> ls_CurCol Then // Different Column
// This.Modify("DESTROY p_" + is_OrderCol)
// is_OrderCol = Left(ls_CurObj,Len(ls_CurObj) - 2)
// ls_Picture = "ORDERUP.BMP"
// is_SortType = "A" // Ascending sort
// li_PictPos = Integer(This.Describe(ls_CurObj + ".X"))+ (Integer(This.Describe(ls_CurObj + ".Width")) - 70)
// ls_AddPict ='create bitmap(band=foreground filename="' + ls_Picture + '" ' + &
// ' x="' + String(li_PictPos) + "~tInteger(describe('" + is_OrderCol + &
// ".X')) + (Integer(describe('" + is_OrderCol + ".Width'))" + ' - 70)" y="24" ' + &
// ' height="33" width="51" border="0" name=p_' + is_OrderCol + ' visible="1")'
// This.Modify(ls_AddPict)
// This.SetSort(is_OrderCol + " " + is_SortType)
// This.Sort()
// Else
// If is_SortType = "A" Then
// ls_Picture = "ORDERDW.BMP"
// is_SortType = "D"
// Else
// ls_Picture = "ORDERUP.BMP"
// is_SortType = "A"
// End If
// This.Modify('p_' + is_OrderCol + '.filename = "' + ls_Picture + '"')
// This.SetSort(is_OrderCol + " " + is_SortType)
// This.Sort()
// End If
//End If



end event

joss 2003-05-19
  • 打赏
  • 举报
回复
请看我的实例!
有数据窗口dw_data
1、数据窗口CLICKED中写
if right(dwo.name,2) = "_t" then wf_dw_sort(dwo.name)

2、定义一个窗口级函数wf_dw_sort有参数as_dwo string类型 返回none()
写脚本
string ls_sort
ls_sort = left(Trim(as_dwo),len(Trim(as_dwo)) - 2) + " A"
dw_data.setsort(ls_sort)
dw_data.sort()
前提条件:
1、所有列头均以"_t"结尾
2、所有列名与列头只相差"_t"
优点:
1、脚本简单
2、容易移植(只要保存两个前提条件,可将脚本写在祖先对象、用户对象中)
cjc79 2003-05-19
  • 打赏
  • 举报
回复
//单击标题列,即可进行排序
string col_name,col_text,sortway
int lg

if sortway=" a" then
sortway=" d"
else
sortway=" a"
end if

col_text=dwo.name;
lg=len(col_text);
col_name=left(col_text,lg - 2)

if not isnull(col_name) then
if dw_1.setsort(col_name+sortway)=1 then
dw_1.sort()
end if
end if

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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