如何为Behavior Manager添加多个Disabled Cell行为控制GridControl多单元格禁用
原因说明
DevExpress GridControl单个实例默认仅支持绑定一个Disabled Cell Behavior,因此设计器中无法添加第二个同类型行为,同时单个控件不能关联多个Behavior Manager实例,所以新增Behavior Manager也无法解决问题。
可行解决方案
方案1:复用现有Disabled Cell Behavior,合并判断规则
不需要新增行为,直接修改现有Disabled Cell Behavior的表达式,把两个禁用逻辑合并即可。你可以直接在表达式编辑器中编写组合条件,同时覆盖两个禁用场景:
要实现cellA为true时禁用cellB、cellD为true时禁用cellE,可以将表达式写为:([FieldName] == 'cellB' AND [cellA] = True) OR ([FieldName] == 'cellE' AND [cellD] = True)
如果逻辑更复杂,也可以拆分配置行为的作用范围,分别针对两列设置对应条件即可。
方案2:使用GridView.ShowingEditor事件代码实现(更灵活)
如果规则后续还要扩展,建议直接删掉已添加的Disabled Cell Behavior,用代码实现所有禁用逻辑,可维护性更高。示例代码如下:
private void gridView1_ShowingEditor(object sender, CancelEventArgs e) { GridView currentView = sender as GridView; string activeColumnField = currentView.FocusedColumn.FieldName; // 规则1:cellA为true时禁用cellB if (activeColumnField == "cellB") { bool cellAVal = Convert.ToBoolean(currentView.GetFocusedRowCellValue("cellA")); e.Cancel = cellAVal; } // 规则2:cellD为true时禁用cellE if (activeColumnField == "cellE") { bool cellDVal = Convert.ToBoolean(currentView.GetFocusedRowCellValue("cellD")); e.Cancel = cellDVal; } }
事件触发时如果将e.Cancel设为true,就会阻止当前单元格进入编辑状态,效果和Disabled Cell Behavior完全一致。
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

