用户很多时候需要对查询出来的数据做小范围重复筛选,这时候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) + ")")
Else
ls_coldisplay = String(la_data)
End If
ls_coldata = String(la_data)
Case "date"
la_data = ids_requst.GetItemDate(i,as_column,primary!,True)
ls_coldisplay = String(la_data,'yyyy-mm-dd')
ls_coldata = String(la_data,'yyyy-mm-dd')
Case "datet"
la_data = ids_requst.GetItemDateTime(i,as_column,primary!,True)
ls_coldisplay = String(la_data,'yyyy-mm-dd hh')
ls_coldata = String(la_data,'yyyy-mm-dd hh')
Case "numbe","decim"
la_data = ids_requst.GetItemNumber(i,as_column,primary!,True)
ls_coldisplay = String(la_data)
ls_coldata = String(la_data)
End Choose
If IsNull(la_data) Then
ls_coldisplay = '空';
ls_coldata = 'null'
End If
If ls_old_data = ls_coldata Then
Continue;
Else
ls_old_data = ls_coldata
End If
li_rc = dw_filter.InsertRow(0)
If idw_requst.FilteredCount() > 0 Then
dw_filter.Object.is_check[li_rc] = 'Y'
Else
&n

最低0.47元/天 解锁文章
1057

被折叠的 条评论
为什么被折叠?



