禁用Flex DataGrid中的行

时间:2009-02-16 10:39:14

标签: flex actionscript-3 actionscript flex3

除非我在这里遗漏了一些明显的东西,否则无法在DataGrid中解除一行或多行。我希望在DataGrid或List组件上有一个disabledRows或disabledRowIndidices属性,但这似乎不存在。

我找到了一个“rendererArray”属性,该属性的作用域为mx_internal,并包含datagrid中所有单元格的所有itemrenderers。所以我可以检查渲染器内部数据的类型和值,并启用或禁用同一行的所有单元格,但这感觉太像黑客了。

有什么建议吗?

编辑:我意识到禁用行可能意味着不同的事情。就我而言,即使datagrid的editable属性设置为true,也意味着无法编辑行。然而,它也可能意味着无法选择一行,但这不是我正在寻找的。

4 个答案:

答案 0 :(得分:6)

要执行此操作,您需要该行的一些数据来表示它是不可编辑的。然后当“itemEditBeginning”然后检查数据或行索引以使用event.preventDefault启用/禁用默认行为...

public function preventEditing(event:DataGridEvent):void
{   
    var status : Boolean = ArrayObjs[rowIndex].isYourCondition;

    if (status == true)
    {
        event.preventDefault();
    }
}

另一种选择是为您的数据单元格创建一个自定义ItemRenderer,但不要认为这是您想要的,因为您需要为每个单元格创建它。

答案 1 :(得分:2)

实际上这最好通过“itemEditBeginning”来完成。 在这里寻找一个好的教程:link text

答案 2 :(得分:0)

Alex Harui在这里提供了一个很好的示例,http://blogs.adobe.com/aharui/2007/06/disabling_list_selection.html这是一个冗长的解决方案,但涵盖了与数据网格的鼠标和键盘交互。我同意你的观点,令人惊讶的是,没有“内置”方法可以做到这一点。

答案 3 :(得分:0)

只需将函数设置为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> 

event.preventDefault()将阻止DataGrid将ItemRenderer切换到ItemEditor,以便停止不符合条件的行的版本。 您的DataGrid必须可编辑才能使其工作。

这应该可以解决问题。