Progress 4GL:能否为可更新Browse控件的单元格分配句柄?
Progress 4GL中为Browse单个单元格分配句柄的问题
不能直接为可更新Browse控件的单个单元格分配独立句柄。原因在于Browse控件的列是作为整体组件存在的,GET-BROWSE-COLUMN()方法返回的是整个列的句柄,而非单个单元格的句柄——你之前遇到的“仅第一条数据生效”其实是误解,该方法的设置会作用于列内所有行的对应单元格,而非仅第一行。
如果需要针对单个单元格实现特殊逻辑(比如编辑权限、样式定制等),可以通过以下替代方案实现:
利用Browse的事件触发逻辑
在ENTRY、VALIDATE或BEFORE-UPDATE等事件中,通过CURRENT-ROW和CURRENT-COLUMN属性定位当前操作的单元格,再执行针对性处理。示例代码:ON ENTRY OF col1 IN browse1 DO: // 仅对第3行的col1单元格设置只读 IF browse1:CURRENT-ROW = 3 THEN browse1:GET-BROWSE-COLUMN("col1"):READ-ONLY = TRUE. ELSE browse1:GET-BROWSE-COLUMN("col1"):READ-ONLY = FALSE. END.动态设置列显示/编辑属性
在定义Browse列时,通过WHEN子句结合行条件动态调整属性,比如样式或编辑权限:DEFINE BROWSE browse1 QUERY qry1 DISPLAY col1 FORMAT "X(20)" WHEN browse1:CURRENT-ROW = 2 THEN READ-ONLY TRUE ELSE READ-ONLY FALSE col2 FORMAT "9999" WITH 10 DOWN.自定义单元格交互逻辑
若需要更复杂的交互,可在BEFORE-UPDATE事件中拦截操作,根据当前行和列判断是否允许执行更新,或触发自定义处理流程。
内容的提问来源于stack exchange,提问作者Abhinit Kumar Das
相关产品推荐
相关产品推荐

