Apache flex 禁用FlexDataGrid中的行
除非我在这里遗漏了一些明显的东西,否则无法取消数据网格中的一行或多行。我希望DataGrid或List组件上有disabledRows或disabledRowIndidices属性,但这似乎不存在 我发现了一个“renderArray”属性,它的作用域是mx_internal,包含datagrid中所有单元格的所有ItemRenders。因此,我可以检查渲染器中数据的类型和值,并启用或禁用同一行的所有单元格,但这感觉太像黑客了 有什么建议吗Apache flex 禁用FlexDataGrid中的行,apache-flex,actionscript-3,actionscript,flex3,Apache Flex,Actionscript 3,Actionscript,Flex3,除非我在这里遗漏了一些明显的东西,否则无法取消数据网格中的一行或多行。我希望DataGrid或List组件上有disabledRows或disabledRowIndidices属性,但这似乎不存在 我发现了一个“renderArray”属性,它的作用域是mx_internal,包含datagrid中所有单元格的所有ItemRenders。因此,我可以检查渲染器中数据的类型和值,并启用或禁用同一行的所有单元格,但这感觉太像黑客了 有什么建议吗 编辑:我意识到禁用一行可能意味着不同的事情。在我的例子
编辑:我意识到禁用一行可能意味着不同的事情。在我的例子中,这意味着即使datagrid的editable属性设置为true,也无法编辑行。然而,这也可能意味着无法选择行,但这不是我想要的。Alex Harui在这里提供了一个源代码的好例子,这是一个有点冗长的解决方案,但涵盖了鼠标和键盘与datagrid的交互。我同意你的看法,令人惊讶的是没有一个“内置”的方法来完成这项工作。实际上,最好通过“ItemEditStart”来完成。
在这里寻找一个好的教程:要做到这一点,您需要该行的一些数据来表示它是不可编辑的。然后当“ItemEditBeging”启动时,检查数据或行索引以启用/禁用event.preventDefault的默认行为
public function preventEditing(event:DataGridEvent):void
{
var status : Boolean = ArrayObjs[rowIndex].isYourCondition;
if (status == true)
{
event.preventDefault();
}
}
另一个选项是为数据单元创建自定义ItemRenderer,但不要认为这是您想要的,因为您需要为每个单元创建自定义ItemRenderer 只需将一个函数设置为DataGrid的“itemEditBegin”,该函数执行以下操作:
protected function validateEdition(event:DataGridEvent):void{
if([EDITION CRITERA NOT MET]){
event.preventDefault();
}
}
<mx:DataGrid id="grid" itemEditBegin="validateEdition(event)" editable="true">
<mx:columns>
[[YOUR COLUMN CONFIGURATION]]
</mx:columns>
</mx:DataGrid>
受保护函数validatedition(事件:DataGridEvent):无效{
如果([不符合版本标准]){
event.preventDefault();
}
}
[[您的列配置]]
event.preventDefault()将停止DataGrid将ItemRenderer切换到ItemEditor,从而停止不符合条件的行的编辑。
您的DataGrid必须是可编辑的才能工作
这应该可以解决问题。禁用对datagrid行意味着什么?在我的情况下,这意味着无法编辑它。但是,这也可能意味着无法选择行。好的评论,我将更新这个问题。另外,数据网格不是由行定义的,而是由列定义的。要禁用某些行,您需要了解底层数据,这意味着在ItemRenders中处理它。