用户很多时候需要对查询出来的数据做小范围重复筛选,这时候Excel的数据筛选功能优势就出来了,本文利用PB自建一个类似的数据筛选功能。
1,新建一个Custom Visual对象,放入一个数据窗口控制,一个单行编辑框,两个checkbox以及两个按钮,新建一个数据窗口对象(外部数据源),三个字段即可,具体如下图,建好后面用户对象如图:
2,功能实现方法,在该对象增加几个实例变量,用户调用它的窗口对象、调用它的数据窗口控件,调用它的备用数据,当前列,过滤条件,具体如图:
3,具体代码(事件及函数),两个事件三个函数
4,运行效果,鼠标移动到列标题自动显示倒黑三角形
5,数据筛选,自动生成筛选下拉框
6,函数代码
//==============================================================================
// 函数: of_get_dw()
//------------------------------------------------------------------------------
// 描述:
//------------------------------------------------------------------------------
// 参数:
// value u_dw adw_data
//------------------------------------------------------------------------------
// 返回值: integer
//------------------------------------------------------------------------------
// 作者: zzx 日期: 2017.11.30
//==============================================================================
Blob lblb_data
idw_requst = adw_data
adw_data.GetFullState(lblb_data)
ids_requst.SetFullState(lblb_data)
Return 1
//==============================================================================
// 函数: of_set_data()
//------------------------------------------------------------------------------
// 描述:
//------------------------------------------------------------------------------
// 参数:
// value string as_column
//------------------------------------------------------------------------------
// 返回值: integer
//------------------------------------------------------------------------------
// 作者: zzx 日期: 2017.11.30
//==============================================================================
Any la_data
String ls_coltype,ls_coldisplay,ls_coldata,ls_column_type,ls_old_data
Long li_rc,i,li_row
Int li_find
li_row = ids_requst.RowCount()
If li_row > 0 Then
ids_requst.SetSort(as_column + ' A')
ids_requst.Sort()
dw_filter.Reset()
ls_coltype = Lower(ids_requst.Describe(as_column + ".ColType" ))
ls_column_type = ids_requst.Describe(as_column+".Edit.Style")
For i = 1 To li_row
Choose Case Left(ls_coltype, 5)
Case "char(", "char"
la_data = ids_requst.GetItemString(i,as_column,primary!,True)
If Lower(ls_column_type) = 'dddw' Or Lower(ls_column_type) = 'ddlb' Then
ls_coldisplay = ids_requst.Describe("Evaluate('LookUpDisplay("+as_column+") ', "+ String(i) + ")")