【问题标题】:How to Process in DataWindow in PowerBuilderPowerBuilder中如何在DataWindow中处理
【发布时间】:2012-06-08 05:11:23
【问题描述】:

我正在用一些数据填充 DataWindow。一些列名称是“请求编号”、“状态”等。

“Status”列可以包含“Pending”、“Active”、“Expired”等值。

每当填充 DataWindow 时,我都想计算 PowerBuilder 中状态为“活动”的记录数。

在获得记录计数后,我将在一些静态文本中填充计数。

任何人都可以帮助我,如何实现这一点,因为我是 PowerBuilder 的新手。

谢谢

【问题讨论】:

    标签: powerbuilder datawindow


    【解决方案1】:

    这将为您提供答案,但它会向您介绍我们 PowerBuilder 开发人员所熟知的“波浪号地狱”。

    ll_Count = Long (dw.Describe ("Evaluate('sum (if((status = ~~~"Active~~~"),1,0))',1)"))
    

    波浪号疯狂与每个级别的字符串评估将表达式归结为下一次评估有关。 (~~ 归结为 ~,而 ~" 归结为 " 如果您的字符串用双引号括起来,这很有用)

    Describe() 内的Evaluate(<expression>, <row>) 将返回给定行上<expression> 的值。 (由于<row> 与在整个数据集上工作的sum() 操作无关,您需要做的就是确保它是有效的行,即在本例中,至少有一行。)

    祝你好运,

    特里。

    【讨论】:

    • 难道他不能也把那个表达式 - sum (if((status = "Active"),1,0)) - 放到他的数据窗口上的一个隐藏计算字段中,然后评估那个隐藏的场地?可能会落在波浪号上。
    • 我的第一反应是不,因为它会比你想要的更频繁地评估(例如,每次你滚动时),这使得它效率低下。此外,如果你想做 PowerBuilder,你需要学会爱上波浪号。但是,现在我的反应是不,因为它不应该被隐藏;它应该在页脚中替换静态文本显示。我更喜欢这个解决方案。
    【解决方案2】:

    一种解决方案是使用您的条件过滤 DW 数据,然后获取行数。

    类似:

    dw_ctrl.SetFilter("status='Active'")
    dw_ctrl.Filter()
    ll_count = dw_ctrl.RowCount()
    //...
    //don't forget to reset filter after that
    dw_ctrl.SetFilter("")
    dw_ctrl.Filter()
    

    【讨论】:

    • 这个解决方案也有效,我可能会使用 Slapout 提到的计算域。如果你使用了这个,那么在你的数据窗口控件上先 SetRedraw(false) 然后 SetRedraw(true) 可能会很好,以避免任何闪烁。
    猜你喜欢
    • 2014-12-26
    • 2013-06-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多