我在ActionScript 3 / Flex 4中使用了AdvancedDataGrid。网格有5列:来电者意图,标签,策略,确认模式和确认提示。除标签外,所有列均可编辑。但是,如果将确认模式值更改为NEVER,则下一列确认提示将变为不可编辑,并设置为值'n / a'(这是所需的功能)。
不幸的是,图像不清晰。在第二行中,我将确认模式值更改为从不。当我开始跳出Confirmation Mode单元格时会发生这种情况: 第一个标签:确认提示填充'n / a'。我没有看到任何焦点。 第二个选项卡:视图堆栈中左起第5个选项卡(深灰色)处于焦点位置。 第三个标签:我没有看到任何焦点。 第4个选项卡:绿色“+”(左上角)的按钮处于焦点。 第五个标签:网格本身是焦点。 第6个标签:最后我到达下一行的Caller Intent单元格(拍摄此图像时)
我尝试为按钮设置tabEnabled =“false”和tabFocusEnabled =“false”。我为AdvancedDataGrid只设置了tabFocusEnabled =“false”。但随后Tab焦点开始移动到右上方面板和右下方面板中的组件。
我需要完成两件事: 1.标签包含在网格,右上方面板和右下方面板中。意思标签不应该从一个区域跨越到另一个区域。 2.有一个不可编辑的字段不会破坏正常的标签行为。
答案 0 :(得分:0)
SIMPLE SOLUTION:使用ENTER横向移动网格。
COMPLEX SOLUTION:使用事件列表器的组合以及其他列的锁定/解锁。
在MXML文件中,您可以编辑DataGridColumn(或使用代码执行此操作)来进行设置。
<mx:DataGridColumn ... id='col1' editable='false' ... />
虽然我知道您说这不起作用,但您可以在用户选择列时锁定所有其他列并使其无法编辑(通过代码+带有ID的DataGridColumn)。结果,所有标签事件都“向下一步”。但是,请确保在取消所有编辑时捕获退出的编辑事件。要“解锁”所有其他柱子。作为概念验证,请尝试创建仅包含1个可编辑列的表
使用事件列表器拦截编辑的开始和结束(因此忽略它/ etc)
//...
datagrid.addEventListner( DataGridEvent.ITEM_EDIT_END, editEvent );
function editEvent( e.DataGridEvent ):void {
if(e.reason == DataGridEventReason.CANCELLED) {
e.preventDefault();
}
if(e.dataField == 'collumn name i dun want to edit') {
e.preventDefault();
}
//...
//CODE TO LOCK / UNLOCK EDIT IN OTHER COLLUMNS
//...
//you may want to add an ignore, if both before / after values are the same
//If you really need that code : i can dig it up (just let me know)
}
通过这种方式,您只需输入ENTER键即可横向移动网格。 (并在不需要时忽略编辑)。并抓住锁定其他网格所需的事件。
答案 1 :(得分:0)
我围绕AdvancedDataGrid完成了很多重点工作。看看我的演讲 http://squaredi.blogspot.com/2011/04/taming-beast-advanceddatagrid.html和http://squaredi.blogspot.com/2011/04/taming-beast-advanceddatagrid-code.html
看看这些例子是否能让您更接近您的需求