当前位置: 代码迷 >> PB >> PB grid组件排序,该如何解决
  详细解决方案

PB grid组件排序,该如何解决

热度:23   发布时间:2016-04-29 07:52:13.0
PB grid组件排序
我用dw grid对数据库的内容进行了排列,比如有姓名,性别,年龄,参加工作时间这几个项目,我如何实现单击姓名这个框实现对姓名排序呢??
------解决思路----------------------
定义窗口实例变量 String  is_oldsort, is_oldcol

//数据窗口Clicked()代码:
String ls_object_name, ls_object_type, ls_cur_col

IF row = 0 THEN
ls_object_name = dwo.Name
IF This.Describe(ls_object_name + ".band") = "header" And This.Describe(ls_object_name + ".text") <> "!" THEN
ls_cur_col = Left(ls_object_name , Len(ls_object_name) - 2)
IF ls_cur_col <> is_oldcol THEN
This.Modify( "destroy t_" + is_ordercol)
is_oldcol = ls_cur_col
is_oldsort = "D"
ELSE
IF is_oldsort = "A" THEN
is_oldsort = "D"
ELSE
is_oldsort = "A"
END IF
END IF
This.SetSort(ls_cur_col + " " + is_oldsort)
This.Sort()
END IF
END IF

注意标题的名称是对应字段的名称+‘_t’,到不是一定要‘_t’,长度2位就可以
------解决思路----------------------
兄弟,这是我收集的一牛人点击表头排序PB代码,你可以试下,一起学习。

string ls_CurObj,ls_CurCol //当前对象,当前列

ls_CurObj = String(dwoname)

if dw_1.Describe(ls_CurObj + ".Band") = "header" then //如果点击的是表头
ls_CurCol = Left(ls_CurObj,Len(ls_CurObj) - 2) //得到列名,一般表头名称是列名后面加'_t'
if dw_1.Describe(ls_CurObj + ".Border") = '5' then //border=5 - 3D Lowered border =6 - 3D Raised,根据border的类型判断升序还是降序
dw_1.Modify(ls_CurObj + ".Border = 6")
dw_1.SetSort(ls_CurCol + " A" )
else
dw_1.Modify(ls_CurObj + ".Border = 5")
dw_1.SetSort(ls_CurCol + " D" )
end if

 dw_1.Sort()
end if


------解决思路----------------------
代码最好是写在  pbm_dwnlbuttonup 所创建的事件里,这样严谨一点
------解决思路----------------------
//点击表头实现排序,在datawindow的clicked事件中
//定义实例变量long il_lastselectedrow;string is_ordercol, is_sorttype
long ll_clickedrow
long ll_start
long ll_end
integer li_index

//點擊表頭排序
string ls_curobj, ls_curcol
integer li_linepos  //line position線段的位置

ls_curobj = string(dwo.name) //獲取點擊對象的名稱
//獲取點擊對象右側20大小的座標
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  //点击的是Header
ls_curcol = left(ls_curobj, len(ls_curobj)- 2) //获取列名
if is_ordercol <> ls_curcol then //沒有進行過排序
is_ordercol = left(ls_curobj, len(ls_curobj ) - 2) //保存上次排序列
is_sorttype = 'A' //記錄上次排序的順序
this.setsort( is_ordercol+ " " + is_sorttype) //設置排序規則
this.sort() //排序
else //進行過排序
if is_sorttype = "A" then //如果是升序
li_linepos -= 20 //調整圖標位置
is_sorttype = "D" //記錄上次排序規則