我是电力建设者的新手。我想在数据窗口中添加过滤器。 我创建了一个数据窗口dw_trans,它返回了反转数和量。我想根据反转数添加过滤器。用户只选择特定行将显示的转码。
答案 0 :(得分:1)
这是一个简单的例子
integer li_rc
long ll_rows, ll_filteredrows, ll_trans_id
string ls_filter, ls_original_filter
// in case you need original filter value
ls_original_filter = dw_trans.describe("Datawindow.Table.Filter")
// create the filter as a string using the dw column name
// ll_trans_id set somewhere else in code (user input or whatever)
ls_filter = 'trans_no = ' + string(ll_trans_id)
//li_rc will be -1 if an error occurs
li_rc = dw_trans.setfilter(ls_filter)
//ll_rows will be number of rows left after filtering
ll_rows = dw_trans.filter()
// # of rows filtered out by current filter
ll_filteredrows = dw_trans.filteredcount()
// remove a filter
dw_trans.setfilter('')
dw_trans.filter()
//set back original filter
IF POS(ls_original_filter,'~"') > 0 THEN
// get rid of tilde doublequote since it is an invalid expression when we try to re-apply the filter
ls_original_filter = replace(ls_original_filter,Pos(ls_original_filter,'~"') - 1, 2, "'")
// do twice since if there is one there will be two
ls_original_filter = replace(ls_original_filter,Pos(ls_original_filter,'~"') - 1, 2, "'")
END IF
li_rc = dw_trans.setfilter(ls_original_filter)
ll_rows = dw_trans.filter()
答案 1 :(得分:1)
您可以通过两种方式进行过滤。 第一路。 将列值视为字符串并将输入作为字符串,并查找相对数字或确切数字。
第二种方式。 你可以有数字类型过滤器。这样您就可以搜索确切的值。但无法搜索相对值。我将为两者编写示例代码。
我将您的列名称视为cust_num。并使用SingleLineEdit控件输入输入值。那个名字是sle_input。在单击的按钮上写下面的代码,然后按下
string ls_input
ls_input = sle_1.text
如果len(trim(ls_imput))= 0那么
消息框('提醒','请输入要过滤的值')
返回
结束如果
dw_trans.setfilter(" string(cust_num)喜欢'" + string(ls_input)+"%'")
dw_trans.filter()
string ls_input
ls_input = sle_1.text
如果len(trim(ls_imput))= 0那么
消息框('提醒','请输入要过滤的值')
返回
结束如果
dw_trans.setfilter(" cust_num =" + string(ls_input))
dw_trans.filter()
powerbuilder有很多很棒的功能。它也可以在输入数字时进行过滤。如果您想了解该代码,请回复我。
感谢
拉吉〜
如果满足此答案,请投票,否则根据您的具体要求添加评论。所以其他有同样问题的人可以快速找到答案。
答案 2 :(得分:1)
您可以非常轻松地执行此操作。在数据窗口的clicked()
事件中尝试此操作 - 它会将所有数据过滤到数据窗口中。
integer li_colnbr, li_row
string ls_colname, ls_value, ls_filter, ls_type
if row = 0 then return //don't do nothing
ls_colname = dwo.name
li_row = row
li_colnbr = integer(this.describe(ls_colname + ".id")) //find the name of the column
if li_colnbr = 0 then
this.setredraw(true)
return
end if
ls_value = string(this.object.data[li_row, li_colnbr]) //get the value of the cell / item
if isnull(ls_value) then
ls_filter = "isnull(" + ls_colname + ")"
else
ls_type = lower(left(this.describe(ls_colname + ".coltype"), 5)) //get the type of the column
choose case ls_type
//creating the final filter
case "decimal", "number", "long", "ulong", "real" //search into the help for all coltypes
ls_filter = ls_colname + " = " + ls_value
case else
ls_filter = "string(" + ls_colname + ") = ~"" + ls_value + "~""
end choose
end if
this.setfilter(ls_filter) //setting the filter
this.filter()
this.sort() //done !
如果您想再次查看检索到的原始数据,请在rbuttondown()
事件中添加此内容:
this.setfilter('') //back to original filter
this.filter( )
this.sort( )