c# - DotVVM - 在 GridView 中为行着色的可能性是什么?
问题描述
我正在尝试根据行中基础项目GridView
的状态(Enum
值)为行着色,但我在文档中找到的解决方案似乎都不适合我。
我DataSource
喜欢这个GridView
public GridViewDataSet<DTO> Items { get; set; }
DTO
BootstrapColor
对象来自微服务,因此在基于“深后端”微服务的 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 的行着色吗?
解决方案
BootstrapColor
枚举应该被视为表示层的东西。您是对的,在内部微服务或应用程序的较低层中使用它是不明智的。
来自较低层的 DTO 应该包含有关正在发生的事情的信息,而不关心它将如何显示给用户。我希望枚举具有 , 等值,Paid
或者一组标志 -等等。Unpaid
Canceled
bool
IsPaid
IsCanceled
在表示层中,您有两种选择:
BootstrapColor
将 DTO 投影到另一个包含枚举值的 DTO(手动或使用 AutoMapper) 。使用 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 类(它们必须是)。paid
IsActive
IsPaid
bool
推荐阅读
- c#-2.0 - 如何在字符串中的单词a之间交换和重新殖民
- java - 如何切换具有相同名称和不同命名空间的类?
- node.js - 使用 opensubtitles API 在 NodeJS 上下载文件
- sql - SQL查询比较表之间的行之间的差异
- listview - Xamarin 中列表视图和网格行高的 DynamicResource 样式
- python - 烧瓶类型错误:__init__() 缺少 1 个必需的位置参数:“状态”
- javascript - 从 API 数据切换 Div 隐藏/显示
- python - 基于索引对多索引数据执行操作
- react-router-v4 - 使用 React BrowserRouter (v4) 如何识别位置何时发生变化?
- java - 为 Android 游戏使用 Aync 任务