首页 > 解决方案 > DotVVM - 在 GridView 中为行着色的可能性是什么?

问题描述

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

DataSource喜欢这个GridView

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

DTOBootstrapColor对象来自微服务,因此在基于“深后端”微服务的 DTO 对象中添加类型属性似乎不合理。这种方法的灵感来自此处的示例 2: https ://www.dotvvm.com/docs/controls/bootstrap/GridView/2.0

也许,有可能<dot:Decorator>在此处的示例 5 中以某种方式使用: 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 的行着色吗?

标签: c#gridviewdotvvm

解决方案


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

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

在表示层中,您有两种选择:

  1. BootstrapColor将 DTO 投影到另一个包含枚举值的 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>

这将根据和属性的值在行上添加active和CSS 类(它们必须是)。paidIsActiveIsPaidbool


推荐阅读