OpenEdge中DevExpress GridView已启用编辑但Budget列仍不可编辑
解决方案
1. 检查数据实体类属性
- 确认
BudgetsRow的Budget属性set方法无逻辑阻塞,确保是直接赋值(无空实现、无异常抛出)。 - 确认属性类型为数值类型(如
decimal),与临时表的DECI类型完全匹配,避免类型不兼容导致无法写入。
2. 修正GridView及列的只读配置
在列初始化代码中,显式设置Budget列的ReadOnly为FALSE,避免全局或隐式配置覆盖:
m_gridView:Columns:AddVisible("Budget"):OptionsColumn:AllowEdit = TRUE. // 添加以下行 m_gridView:Columns["Budget"]:OptionsColumn:ReadOnly = FALSE.
同时确认全局只读配置未开启:
m_gridView:OptionsBehavior:ReadOnly = FALSE.
3. 改用更适配的数值编辑器
替换RepositoryItemTextEdit为RepositoryItemSpinEdit(专为数值编辑设计,兼容性更好),配置示例:
DEF VAR columnSpinEdit AS RepositoryItemSpinEdit NO-UNDO. ASSIGN columnSpinEdit = NEW RepositoryItemSpinEdit() columnSpinEdit:ReadOnly = FALSE columnSpinEdit:Enabled = TRUE columnSpinEdit:Mask:MaskType = DevExpress.XtraEditors.Mask.MaskType:Numeric columnSpinEdit:Mask:EditMask = "n2" columnSpinEdit:Mask:UseMaskAsDisplayFormat = TRUE columnSpinEdit:MaxValue = 999999999.99 // 按需调整业务最大值 columnSpinEdit:MinValue = 0 // 按需调整业务最小值 m_gridView:Columns["Budget"]:ColumnEdit = columnSpinEdit.
4. 确认数据源绑定配置
显式设置BindingSource的可编辑属性:
m_bindingSource:AllowEdit = TRUE.
在刷新数据后,强制更新绑定:
m_bindingSource:DataSource = dataList. // 添加以下行 m_bindingSource:ResetBindings(FALSE).
5. 排查事件拦截
检查ShowingEditor事件的自定义代码,确保未设置e.Cancel = TRUE(这会直接阻止编辑器激活):
METHOD PRIVATE VOID m_gridView_ShowingEditor( sender AS System.Object, e AS System.ComponentModel.CancelEventArgs ): // 确保无此行代码:e.Cancel = TRUE END METHOD.
6. 临时排查Mask影响
若以上步骤无效,可临时移除Mask配置,测试是否能正常编辑:
// 注释掉Mask相关代码 // columnEditBox:Mask:MaskType = DevExpress.XtraEditors.Mask.MaskType:Numeric // columnEditBox:Mask:EditMask = "n2" // columnEditBox:Mask:UseMaskAsDisplayFormat = TRUE
如果此时能编辑,说明Mask格式与属性类型不匹配,需调整EditMask格式或确认属性类型。
内容的提问来源于stack exchange,提问作者CephDigital
相关产品推荐
相关产品推荐

