首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

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

2012-12-31 
PB grid组件排序我用dw grid对数据库的内容进行了排列,比如有姓名,性别,年龄,参加工作时间这几个项目,我如

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"//記錄上次排序規則


else//如果是降序
is_sorttype = "A"//記錄上次排序規則
end if
this.setsort(is_ordercol + " " + is_sorttype)
this.sort()
end if
end if

//選擇兩行以上,shift連續選擇,ctrl間斷選擇
ll_clickedrow = this.getclickedrow()
if ll_clickedrow < 1 then return

if keydown(keyshift!) then
if ll_clickedrow < il_lastselectedrow then
ll_start = ll_clickedrow
ll_end = il_lastselectedrow
else
ll_start = il_lastselectedrow
ll_end = ll_clickedrow
end if
if il_lastselectedrow>0 then
selectrow(0, false)
for li_index = ll_start to ll_end
selectrow(li_index, true)
next
else
selectrow(ll_clickedrow, true)
end if
elseif keydown(keycontrol!) then
if isselected (ll_clickedrow) then
selectrow(ll_clickedrow, false)
else
selectrow(ll_clickedrow, true)
end if
else
selectrow(0, false)
selectrow(ll_clickedrow, true)
end if

il_lastselectedrow = ll_clickedrow


//请给分,谢谢
[解决办法]
上例下载地址

http://download.csdn.net/source/3070062
[解决办法]
函数在自定义控件uo_dwsort里,

这样只要指定数据源,就可以为每个数据窗口实现排序功能

热点排行