Recursion DataColumn中递归表达式的替代方法

Recursion DataColumn中递归表达式的替代方法,recursion,ado.net,dataset,calculated-columns,Recursion,Ado.net,Dataset,Calculated Columns,在持久化为XML的数据集中,我有一个区域表,它有三列:ID、Name和ParentId。ParentId是一个外键,它引用回ID,有效地创建了区域的层次结构 我希望在名为path的新列中维护每个区域的完整路径,其值可以递归地定义为 { area.Name ; if ParentId is null area.Path := { { Parent.Path + "\" + area.Name ; oth

在持久化为XML的数据集中,我有一个区域表,它有三列:ID、Name和ParentId。ParentId是一个外键,它引用回ID,有效地创建了区域的层次结构

我希望在名为path的新列中维护每个区域的完整路径,其值可以递归地定义为

             { area.Name                      ; if ParentId is null
area.Path := {
             { Parent.Path + "\" + area.Name  ; otherwise
我希望将此列实现为计算列。 不幸的是,当我尝试将Expression属性设置为以下表达式时

iif(isnull(ParentId, 0) = 0, Name, Parent.Path + '\' + Name)
我得到以下错误:

由于表达式中存在循环引用,无法设置表达式属性


这似乎排除了计算列的可能性。那么,还有什么选择呢?即,如何确保Path列始终包含可在数据绑定UI中使用的正确值?

将事件处理程序附加到datatable的行添加/更改使用事件,当这些事件在事件之前触发时以ING结尾,并检查正在添加/更改的值是否具有闭合路径数据集是从XML读取的,因为行不一定是按拓扑顺序先加载到父级,然后再加载到子级,而是将所有行加载到表中,然后启用并检查约束。因此,需要进行一些后期处理,作为加载的一部分