hur.cn - 华软网

 热门搜索

带有提示的排序

  作者:未知    来源:网络    更新时间:2018/12/6
数据窗口中单击到某列就在其列题目文本后加上“<<”并实现升序排列,再次单击则将“<<”消灭,并改成">>",并实现降序排列 

------华软网友回答------
建议改成点击题目文本排序
把题目文本规则命名(column_t),
掏出dwo.name,判断右两位是否"_t",如果是,按左侧column名排序。
至于是升序照旧降序,根据其列题目文本决意。然后把其它column的题目恢复
------华软网友回复------
定义实例变量
string is_OrderCol 
string is_SortType = "D"
在单击事件中写
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 // 检验是否题目栏
//取当前列列名;数据窗口对象中列所对应题目栏text命名须用默许值,即:列名+ _t
ls_CurCol = Left(ls_CurObj,Len(ls_CurObj) - 2) 
If is_OrderCol <> ls_CurCol Then // 若点击列与上次不同
This.Modify("DESTROY p_" + is_OrderCol) //删除上次所建图标
is_OrderCol = ls_CurCol//Left(ls_CurObj,Len(ls_CurObj) - 2)
ls_Picture = "bmp\ORDERUP.BMP"
is_SortType = "A" // 升序
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 = "bmp\Orderdown.BMP"
is_SortType = "D"
Else
ls_Picture = "bmp\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
//点击题目时,不让整列反黑显示
return 1 
End If

------华软网友回复------
楼上方法不错,其BMP就是你需要显示的图片.
------华软网友回复------
不错不错,学习
------华软网友回复------
还能够不运用图片:


将下面的代码保存成uo_dwsort.sru,导入试试。(pb7.0)


$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_asc (integer ai_linepos)
public subroutine of_des (integer ai_linepos)
end prototypes

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

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

event clicked;//点击列头排序改善代码(不运用箭头图片,可随意改变列头的颜色)
//作者: YL


//排序
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

on uo_dwsort.create
end on

on uo_dwsort.destroy
end on

event constructor;//======================================================
//Grid Type Datawindow Basic Service
//======================================================
//1. Sort 
//2. Select 
//3. Mulitiselect
//4. 


end event


------华软网友回复------
to:freeliu()
    没有明白你的意思,不知该怎么样实现      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。