You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Progress OpenEdge中通过下拉列表选择按名称或账户码排序?

Progress OpenEdge 实现按名称/账户码动态排序

你可以通过判断下拉列表的选中值,动态调整查询的排序条件,两种实现方式供你参考:

方式一:IF-ELSE分支(逻辑清晰,易维护)

DEFINE VARIABLE cSortChoice AS CHARACTER NO-UNDO.

/* 获取下拉列表的选中值,假设控件名为cboSort */
cSortChoice = cboSort:SCREEN-VALUE.

IF cSortChoice = "Name" THEN DO:
    FOR EACH Customer NO-LOCK
        BY Customer.Name:  /* 按客户名称字母顺序排序 */
        /* 这里写你的结果展示逻辑,比如填充到界面控件 */
        DISPLAY Customer.Name Customer.AccountCode.
    END.
END.
ELSE IF cSortChoice = "Account" THEN DO:
    FOR EACH Customer NO-LOCK
        /* 如果AccountCode是数字类型,直接BY即可;如果是字符型存数字,用INTEGER()转换确保数字排序 */
        BY Customer.AccountCode:
        DISPLAY Customer.Name Customer.AccountCode.
    END.
END.

方式二:动态排序字段(代码更简洁)

DEFINE VARIABLE cSortChoice AS CHARACTER NO-UNDO.
DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.

cSortChoice = cboSort:SCREEN-VALUE.

/* 根据选择设置排序字段 */
cSortField = CASE cSortChoice:
    WHEN "Name" THEN "Customer.Name"
    WHEN "Account" THEN "Customer.AccountCode"
    ELSE "Customer.Name"  /* 兜底默认按名称排序 */
END CASE.

FOR EACH Customer NO-LOCK
    BY VALUE(cSortField):
    DISPLAY Customer.Name Customer.AccountCode.
END.

注意事项

  • 若AccountCode是字符类型但存储数字内容,要按数字排序的话,需把Customer.AccountCode替换为INTEGER(Customer.AccountCode)或DECIMAL(Customer.AccountCode),避免出现"10"排在"2"前面的字符排序问题
  • 确保下拉列表的选项文本和代码中判断的字符串完全匹配(大小写、空格都要一致)

内容的提问来源于stack exchange,提问作者OrbitalChairLeg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:40:37