2010-06-18 42 views
2

如何单独验证DataGridColumn中的单元格? (ActionScript 3.5)根据给定行中的字段验证配置的每个单元格。例如单独验证DataGridColumn单元格

FIELD    VALUE TYPE 
age     13  Integer 
height    13x3 Integer 
registered   true Boolean 
temperature   98.G6 Float 

在这种情况下,当然13x3和98.G6将是无效的。

很容易写一个验证器;并访问数据提供者对象。

但是我怎么到GUI小区的各个访问对象,所以我可以设置Errorstring,则对单个细胞,直接或通过一个验证?跨所述单元

的itemRenderer/的TextInput控制被重新用于性能的原因,所以访问GUI级对象是棘手的。


编辑

数目:以验证并显示无效标记

  1. 一种方法,但不是每小区,是验证所有的数据提供者对象,然后设置整个网格上的错误串

  2. 验证每个单元格的一种方法是在itemEditEnd事件处理程序中。 (见这些页面ABCD)。一个缺点是它只允许从“内部”访问单元,而不是在命令中验证网格的动作。

  3. 自定义的itemRenderer是另一种可能性,如在下面的答案,但像3的上方,它只允许从“内部”访问单元,而不是在用于验证对命令网格的动作。

  4. 查看Richard Haven的回答如下。

  5. 而这里的how to access the GUI objects:相关GUI对象的列表是一个受保护的字段;所以你可以通过继承来访问它,然后迭代代表单元的GUI组件,并在每个组件上设置errorString

回答

1

如果您正在寻找任意验证(例如在按钮或页面导航上)而不是直接导航(例如在单元退出或编辑结束时),那么数据在底层dataProvider中为。我会在那里进行验证,而不是在网格内部进行挖掘。

可以将标志添加到数据项,以便项目渲染其显示为一个错误(或use an external list来标记它)。

干杯

+0

当然,我们会对* dataProvider *中的数据进行验证。问题是如何设置GUI元素,例如* errorString *。您对项目渲染器中的验证标志的想法很好,但仍然无法回答如何从网格外的“验证”按钮验证整个网格。当你有一个要关闭的对话框时,这一点很重要,但必须在关闭时进行验证(根据需要阻止关闭)。 – 2010-06-28 19:49:28

2

This website at BigResource询问如何访问单个单元格。第三篇文章回答了这个问题,并提供了一个比这更好的资源的链接。想想你会想要两个。希望这有助于。

+0

谢谢。你链接的网站似乎说明了如何访问给定小区的*数据*(什么是“后第三”你指什么?),而我在寻找一种方式来遍历* GUI组件*代表细胞。看到我编辑的问题,上面给出了一些链接。看起来Flex每次退出单元格都会破坏TextInput或其他编辑器控件。 我想验证何时按下OK按钮。无效的单元格将获得红色边框和错误工具提示通常用于验证。 我要指出,这可能是在给定的坐标来获得的CellRenderer。 – 2010-06-21 11:29:18

+0

我要指出,有可能在fl.controls.DataGrid,但不是在mx.Controls.DataGrid获得在给定的行和列的CellRenderer。 – 2010-06-21 11:44:08

1

你确定你确实想访问单个单元格的DisplayObjects吗?该组件管理实例,以便它只创建尽可能多的显示内容(以便大型数据集不需要屏幕上显示大量DisplayObject)。

我认为一个更好的选择是为您的DataGridColumn提供一个自定义的itemRenderer。你可以编写这个类来接受验证器并更新其外观,并且有大约a bunch of great tutorials

+0

谢谢 - 但我想验证在DataGrid的“外部”按下按钮时的情况,如下面的MXML示例中所示。我知道如何从DataGridEvent处理程序的“内部”进行验证,可选地使用自定义的itemRenderer,但是如果验证失败,我需要阻止包含此代码的对话框关闭。 – 2010-06-22 21:00:30