分别验证 DataGridColumn 单元格
Posted
技术标签:
【中文标题】分别验证 DataGridColumn 单元格【英文标题】:Validate DataGridColumn cells individually 【发布时间】:2011-03-05 12:31:07 【问题描述】:如何单独验证 DataGridColumn 中的单元格? (ActionScript 3.5) 根据给定行中的字段,为每个单元格配置验证。例如
FIELD VALUE TYPE
age 13 Integer
height 13x3 Integer
registered true Boolean
temperature 98.G6 Float
在这种情况下,13x3 和 98.G6 当然是无效的。
编写一个验证器很容易;并访问数据提供者对象。
但是我如何获得对 GUI 单元对象的单独访问,以便我可以直接或通过 Validator 在单个单元上设置 errorString?
itemRenderer/TextInput 控件出于性能原因在单元格中重复使用,因此访问 GUI 级对象很棘手。
编辑
答案:
验证和显示无效标记的一种方法是验证所有数据提供者对象,然后在整个网格上设置 errorString。
验证每个单元格的一种方法是在 itemEditEnd 事件处理程序上。 (见这些页面ABCD)。一个缺点是它只允许从“内部”访问单元格,而不是通过命令验证网格的操作。
自定义 itemRenderer 是另一种可能性,如下面的答案所示,但就像上面的 3 一样,它只允许从“内部”访问单元格,而不是在验证的操作中命令上的网格。
请参阅下面 Richard Haven 的回答。
这里是how to access the GUI objects:相关的GUI对象列表是一个受保护的字段;因此您可以通过子类化来访问它,然后遍历代表单元的 GUI 组件并在每个单元上设置 errorString。
【问题讨论】:
【参考方案1】:BigResource 的This website 询问如何访问单个单元格。第三篇文章回答了那里的问题,并提供了比这更好的资源的链接。认为你会想要两者。希望这会有所帮助。
【讨论】:
谢谢。您链接的网站似乎显示了如何访问给定单元格中的 data (您所指的“第三篇文章”是什么?),而我正在寻找一种方法来遍历 GUI 组件 代表单元格。请参阅我对上面问题的编辑,其中提供了一些链接。每次退出单元格时,Flex 似乎都会破坏 TextInput 或其他编辑器控件。我想验证何时按下 OK 按钮。无效单元格将获得通常用于验证的红色边框和错误工具提示。我应该注意,可以在给定坐标处获取 CellRenderer。 我应该注意到,在 fl.controls.DataGrid 中是可能的,但在 mx.Controls.DataGrid 中却不能在给定的行和列中获取 CellRenderer。【参考方案2】:您确定要访问各个单元格的 DisplayObject 吗?该组件管理实例,以便它只创建需要显示的数量(这样庞大的数据集就不需要在屏幕上显示大量的 DisplayObject)。
我认为更好的选择是为您的 DataGridColumn 提供自定义 itemRenderer。你可以编写这个类来接受一个验证器并更新它的外观,这方面有a bunch of great tutorials。
【讨论】:
谢谢——但我想验证何时按下 DataGrid 的“外部”上的按钮,如下面的 MXML 示例所示。我确实知道如何从 DataGridEvent 处理程序的“内部”进行验证,可以选择使用自定义 itemRenderer,但是如果验证失败,我需要阻止关闭包含此代码的对话框。【参考方案3】:如果您正在寻找任意验证(例如在按钮或页面导航上)而不是立即导航(例如在单元格退出或编辑结束时),那么数据 在底层数据提供者。我会在那里进行验证,而不是在网格内四处寻找。
您可以向数据项添加一个标志,以便项目渲染器将其显示为错误(或use an external list 进行标记)。
干杯
【讨论】:
当然,我们对 dataProvider 中的数据进行验证。问题是如何设置 GUI 元素,例如errorString。您对项目渲染器中的验证标志的想法很好,但仍然没有回答如何验证整个网格,例如网格外的“验证”按钮。当您有一个要关闭但必须在关闭时验证(根据需要阻止关闭)的对话框时,这一点很重要。以上是关于分别验证 DataGridColumn 单元格的主要内容,如果未能解决你的问题,请参考以下文章
当同一行中的另一个单元格在 Javascript 中具有值时,验证一个单元格是不是成为必需的
如何在#ag-grid for React 中执行单元格验证