2017-08-03 66 views
0

在我的DataSet(其持久化爲XML)中,我有一個包含三列的Area表:ID,NameParentIdParentId是一個外鍵,返回ID,有效地創建區域層次結構。DataColumn中的遞歸表達式的替代方法

我要保持在一個名爲Path新列,其值可以遞歸定義爲

   { area.Name      ; if ParentId is null 
area.Path := { 
      { Parent.Path + "\" + area.Name ; otherwise 

我本來希望實現此列計算列各區域的完整路徑。 不幸的是,當我嘗試了Expression屬性設置爲以下表達式

iif(isnull(ParentId, 0) = 0, Name, Parent.Path + '\' + Name) 

我得到以下錯誤:

Cannot set Expression property due to circular reference in the expression.

這似乎排除計算列。那麼有什麼選擇?即我如何確保Path列始終包含可在數據綁定的UI中使用的正確值?

回答

1

附加一個事件處理程序的DataTable的行添加/更改(之前爲這些火ING結束使用事件)的事件,並檢查所增加的價值/改變有

+0

這種循序漸進的方法是行不通的閉合路徑當從XML讀取DataSet時,由於行不一定按照拓撲順序(子節點之前的父節點)加載,而是將所有行加載到表中,然後啓用和檢查約束。 –

+0

因此需要一些後處理作爲負載的一部分(?) –