DotVVM - 在 GridView 中为行着色的可能性有哪些?

DotVVM - What are the possibilities for coloring rows in GridView?

我正在尝试根据行中基础项目的状态(Enum 值)为 GridView 中的行着色,但是 none 我的解决方案在文档中找到的似乎适合我。

我有 DataSource 这样的 GridView

public GridViewDataSet<DTO> Items { get; set; }

DTO 对象来自微服务,所以在我看来将 BootstrapColor 类型的 属性 添加到基于 "deep backend" 微服务。此方法的灵感来自此处的示例 2: https://www.dotvvm.com/docs/controls/bootstrap/GridView/2.0

也许,可以像示例 5 中那样使用 <dot:Decorator>https://www.dotvvm.com/docs/controls/builtin/GridView/latest

但我还没有找到任何使用 <dot:Decorator><bs:ColorDecorator> 根据文档中的某些条件为行着色的适当示例。我只能用相同的颜色给所有行上色。

我尝试在标记中应用一些条件,例如。

<RowDecorators>
    <bs:ColorDecorator Color="{value: EnumState == StateValue ? Color1 : Color2 }"></bs:ColorDecorator>
</RowDecorators>

但是没用

除上述方法外,还有其他方法可以为 GridView 的行着色吗?

BootstrapColor 枚举应该被视为表示层的东西。你是对的,在内部微服务或应用程序的较低层中使用它是不明智的。

来自下层的 DTO 应该包含有关正在发生的事情的信息,而不关心它将如何显示给用户。我希望枚举具有 PaidUnpaidCanceled 等值,或者一组 bool 标志 - IsPaidIsCanceled等等。

在表现层,你有两种选择:

  1. 将 DTO 投影到另一个包含 BootstrapColor 枚举值的 DTO(手动或使用 AutoMapper)。

  2. 在 DotVVM 数据绑定中使用表达式在标记中进行转换。

对于简单的情况,我会选择第二个选项。

<bs:ColorDecorator> 的正确语法是这样的:

<RowDecorators>
    <bs:ColorDecorator Color="{value: State == OrderState.Confirmed ? BootstrapColor.Success : BootstrapColor.Danger }" />
</RowDecorators>

您需要添加适当的 @import 指令,以便正确解析枚举。

如果有两个以上的选项,或者一些状态可以并存,可以考虑使用CSS 类:

<RowDecorators>
    <dot:Decorator class-active="{value: IsActive}" class-paid="{value: IsPaid}" />
</RowDecorators>

这将根据 IsActiveIsPaid 属性的值在行上添加 activepaid CSS 类 (它们必须是 bool)。