如何在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
相关产品推荐
相关产品推荐

