2010-06-18 41 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