专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > PB

PB grid组件排序,该如何处理

发布时间:2011-06-29 20:31:45 文章来源:www.iduyao.cn 采编人员:星星草
PB grid组件排序
我用dw grid对数据库的内容进行了排列,比如有姓名,性别,年龄,参加工作时间这几个项目,我如何实现单击姓名这个框实现对姓名排序呢??

------解决方案--------------------
定义窗口实例变量 String is_oldsort, is_oldcol
C/C++ code

//数据窗口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

------解决方案--------------------
兄弟,这是我收集的一牛人点击表头排序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)
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: