【问题标题】:Alternative for recursive expressions in DataColumnDataColumn 中递归表达式的替代方法
【发布时间】:2018-01-10 23:49:52
【问题描述】:

在我的 DataSet(以 XML 形式保存)中,我有一个包含三列的 Area 表:IDNameParentIdParentId 是一个外键,它引用回 ID,有效地创建了区域的层次结构。

我想在一个名为Path的新列中维护每个Area的完整路径,其值可以递归定义为

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

我希望将此列实现为计算列。 不幸的是,当我尝试将Expression 属性设置为以下表达式时

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

我收到以下错误:

由于表达式中的循环引用,无法设置 Expression 属性。

这似乎排除了计算列。那么有哪些替代方案呢? IE。如何确保 Path 列始终包含可在数据绑定 UI 中使用的正确值?

【问题讨论】:

    标签: recursion ado.net dataset calculated-columns


    【解决方案1】:

    将事件处理程序附加到数据表的行添加/更改(使用以 ING 结尾的事件,因为这些事件之前触发)事件并检查正在添加/更改的值是否具有闭合路径

    【讨论】:

    • 当从 XML 读取 DataSet 时,这种增量方法不起作用,因为行不一定按拓扑顺序加载(父项在子项之前),而是所有行都加载到表,然后启用并检查约束。
    • 因此需要在加载过程中进行一些后期处理(?)
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2012-05-31
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多