Datos tipados (Spans)
Componentes para mostrar valores tipados (dinero, fechas, decimales, tiempo) con el formato y la region de Dinaup.
Lees una fila de un informe y pintas cada celda con el formato correcto: el dinero con su simbolo, la fecha en local, los minutos como duracion, los bytes como MB. Todo sin formatear a mano ni acordarte de la cultura del cliente.
Comparten patron: les pasas el valor crudo y ellos deciden como mostrarlo. Casi todos aceptan un Label/Key, un Icon opcional y un FontSize. El formato y la region salen del RegionService interno, asi que el mismo componente se ve bien en cualquier pais. Mapean 1:1 con las columnas que devuelve un informe del SDK: la columna trae el dato, el span lo pinta.
El tipo del dato manda: si tienes un decimal de euros usa DnzSpanMoney, si es un porcentaje DnzSpanPercent, si son minutos DnzSpanMinutes. No hay un span generico que valga para todo.
Que formatea cada uno
| Componente | Tipo de valor | Para que sirve |
|---|---|---|
DnzSpanMoney | decimal? (importe) | Dinero con simbolo de moneda y region. Auto-color rojo/verde |
DnzSpanDecimal | decimal? | Decimal con sufijo libre ( kg, uds...). Auto-color |
DnzSpanPercent | decimal? | Porcentaje con % y decimales recortados. Auto-color |
DnzSpanInteger | decimal? | Entero pelado (trunca decimales) |
DnzSpanDate | DateOnly? | Fecha localizada con badge Hoy/Ayer/Pasado |
DnzSpanDateTime | DateTime? | Fecha y hora completa, relativa o con estado |
DnzSpanMinutes | decimal? (minutos) | Minutos como duracion corta: 90 -> 1h 30m |
DnzSpanKV | string | Par clave-valor inline (label + valor) |
DnzSpanBytes | long? | Tamano en B/KB/MB/GB/TB |
DnzSpanGigaBytes | decimal? (GB) | GB con conversion automatica de unidad |
DnzSpanGrams | decimal? (gramos) | Peso en gr o Kg segun magnitud |
DnzTimeSpanDisplay | TimeSpan? | Duracion en partes: 2d 3h 15m |
DnzTimeSpanDisplayCompact | TimeSpan? | Igual, en tamano pequeno |
DnzTimeSpanDisplayBadge | TimeSpan? | Igual, cada parte en un badge |
Todos se autoocultan cuando el valor es nulo: si Value/Amount viene null, no pintan nada. No hace falta envolverlos en un @if.
AutoColor: verde positivo, rojo negativo
DnzSpanMoney, DnzSpanDecimal y DnzSpanPercent traen AutoColor. Con el activado, el valor se pinta verde si es positivo y rojo si es negativo. Ideal para saldos, margenes o variaciones, donde el signo distingue lo que suma de lo que resta sin escribir una sola condicion.
<DnzSpanMoney Amount=@cliente.Saldo AutoColor=true />Saldo positivo, verde. Saldo en numeros rojos, rojo. Sin un solo if.
<DnzSpanMoney Amount=@factura.Total />Un total se enseña en el color por defecto: no tiene sentido pintar de rojo un importe que solo es lo que hay que pagar.
DnzSpanMoney
Importes de dinero con el simbolo de moneda y el formato de la region del cliente. Para listados de facturas, totales y resumenes.
<DnzSpanMoney Amount=@factura.Total AutoColor=true />Con etiqueta e icono para un KPI en una tarjeta:
<DnzSpanMoney Amount=@resumen.PendienteCobro Label="Pendiente de cobro" Icon="payments" AutoColorRed=true FontSize="20px" />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Amount | decimal? | 0 | El importe a mostrar. Si es null no pinta nada |
Label | string | "" | Etiqueta encima del importe (caption) |
Icon | string | "" | Icono Material a la izquierda (requiere Label) |
AutoColor | bool | false | Verde si positivo, rojo si negativo |
AutoColorGreen | bool | false | Solo verde cuando es positivo |
AutoColorRed | bool | false | Solo rojo cuando es negativo |
CssClass | string | "" | Clases extra para el <span> |
FontSize | string | "16px" | Tamano de fuente |
IsVisible | bool | true | Oculta el componente sin quitarlo del arbol |
Sin Label pinta solo el importe. Con Label lo monta en columna (etiqueta arriba, importe abajo). Con Label + Icon, ademas añade el icono a la izquierda del bloque.
DnzSpanDecimal
Cualquier decimal con un sufijo libre detras: unidades de stock, kilos, lo que sea. Lo que DnzSpanMoney hace con la moneda, este lo deja a tu eleccion via Symbol.
<DnzSpanDecimal Value=@articulo.Stock Symbol=" uds" />Una diferencia con color segun el signo:
<DnzSpanDecimal Value=@diferencia Symbol=" kg" AutoColor=true />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | decimal? | null | Numero a mostrar. Si es null no pinta nada |
Symbol | string | "" | Texto detras del numero ( kg, uds...) |
AutoColor | bool | false | Verde si positivo, rojo si negativo |
Class | string | "" | Clases extra para el <span> |
FontSize | string | "16px" | Tamano de fuente |
DnzSpanPercent
Porcentaje listo: tu das el numero en escala humana (12.5), el le pone el % y recorta los decimales sobrantes.
<DnzSpanPercent Value=@informe.Margen Decimals="2" AutoColor=true />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | decimal? | null | Porcentaje a mostrar. Si es null no pinta nada |
Decimals | int | 1 | Decimales maximos; los ceros de cola se omiten (12,50 -> 12,5) |
AutoColor | bool | false | Verde si positivo, rojo si negativo |
Class | string | "" | Clases extra para el <span> |
FontSize | string | "16px" | Tamano de fuente |
Value va en escala humana: para enseñar "12,5 %" pasale 12.5, no 0.125.
DnzSpanInteger
Entero limpio: trunca la parte decimal del valor y lo pinta sin separadores ni simbolos. Para contadores y cantidades enteras donde los decimales sobran.
<DnzSpanInteger Value=@(item.Quantity) />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | decimal? | null | Valor a truncar y mostrar como int |
FontSize | string | "16px" | Tamano de fuente |
DnzSpanDate
Fecha (sin hora) en formato amigable y localizado, con un badge opcional que dice si es Hoy, Ayer, Manana, Pasado o Futuro. Trabaja con DateOnly.
<DnzSpanDate Value=@DateOnly.FromDateTime(item.FechaCreacion) />Con el badge de estado para una agenda de vencimientos:
<DnzSpanDate Value=@vencimiento.Fecha ShowStatus=true />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | DateOnly? | null | Fecha a mostrar. Si es null no pinta nada |
FriendlyMode | bool | true | Formato amigable en lugar de literal |
ShowBadge | bool | false | Pinta la fecha dentro de un RadzenBadge |
ShowStatus | bool | false | Anade el badge Hoy/Ayer/Pasado al lado |
Class | string | "" | Clases extra para el contenedor |
FontSize | string | "0.875rem" | Tamano de fuente |
El tooltip siempre lleva la fecha exacta, aunque el texto visible sea amigable. Pasas el raton por encima y ves el dia concreto.
DnzSpanDateTime
Fecha y hora completas. Puede pintarse en modo relativo (hace 5 min), como caption discreto, o con el badge de estado. Trabaja con DateTime (en UTC, como todo en Dinaup).
<DnzSpanDateTime Value=@item.FechaModificacion />Modo relativo para un feed de actividad reciente:
<DnzSpanDateTime Value=@evento.Cuando Relative=true ShowStatus=true />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | DateTime? | null | Fecha y hora a mostrar. Si es null no pinta nada |
Relative | bool | false | Texto relativo (hace 5 min); el absoluto va al tooltip |
ShowBadge | bool | false | Pinta el texto dentro de un RadzenBadge |
ShowStatus | bool | false | Anade el badge Hoy/Ayer/Pasado al lado |
Caption | bool | false | Estilo caption (texto pequeno y discreto) |
Class | string | "" | Clases extra para el contenedor |
FontSize | string | "0.875rem" | Tamano de fuente |
DnzSpanMinutes
Convierte un numero de minutos en una duracion corta y legible: 45 -> 45m, 90 -> 1h 30m, 180 -> 3h. Aguanta negativos (les antepone el signo). Para tiempos de servicio, citas o tareas medidas en minutos.
<DnzSpanMinutes Value=@cita.DuracionMinutos />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | decimal? | 0 | Minutos totales. Soporta negativos (-30m). Si es null no pinta nada |
FontSize | string | "16px" | Tamano de fuente |
DnzSpanKV
Par clave-valor: la etiqueta arriba o a la izquierda y el valor debajo o al lado. Es el bloque de detalle tipico de un dialogo o una ficha. A diferencia del resto, este recibe el valor ya formateado como string (o un ChildContent con markup libre).
<DnzSpanKV Key="Estado" Value=@item.Estado Icon="check_circle" /><DnzSpanKV Key="Total" Horizontal=true Icon="euro" TextRight=true>
<DnzSpanMoney Amount=@factura.Total />
</DnzSpanKV>El ChildContent manda: si lo pones, ignora Value y pinta lo que metas dentro.
Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Key | string | "" | La etiqueta / clave |
Value | string | null | El valor ya formateado (si no usas ChildContent) |
ChildContent | RenderFragment | null | Markup libre para el valor; tiene prioridad sobre Value |
Horizontal | bool | false | Clave y valor en la misma linea, no apilados |
Icon | string | "" | Icono Material o URL de imagen (/... o http) |
IconColor | string | "" | Color del icono |
ValueColor | string | "" | Color del texto del valor |
TextRight | bool | false | Alinea el valor a la derecha |
LabelWidth | string | "" | Ancho maximo de la etiqueta |
Class | string | "" | Clases extra para el contenedor |
Visible | bool | true | Oculta el componente entero |
DnzSpanBytes
Tamano de fichero a partir de un long de bytes, con conversion automatica de unidad: elige entre B, KB, MB, GB o TB segun la magnitud. Para adjuntos, backups y almacenamiento.
<DnzSpanBytes Value=@adjunto.TamanoBytes />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | long? | null | Tamano en bytes. Si es null no pinta nada |
Class | string | "" | Clases extra para el <span> |
FontSize | string | "16px" | Tamano de fuente |
DnzSpanGigaBytes
Igual que DnzSpanBytes pero partiendo de GB (decimal). Sube a TB o baja a MB/KB segun el valor, y puede pintar en color cuando se acerca a la cuota.
<DnzSpanGigaBytes Value=@tenant.AlmacenamientoGb AutoColor=true />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | decimal? | null | GB a mostrar. Si es null no pinta nada |
AutoColor | bool | false | Naranja si > 50, rojo si > 100 |
Class | string | "" | Clases extra para el <span> |
FontSize | string | "16px" | Tamano de fuente |
Ojo: el AutoColor de DnzSpanGigaBytes no es verde/rojo por signo, es un semaforo de consumo (naranja al pasar de 50 GB, rojo al pasar de 100 GB). Pensado para cuotas de almacenamiento.
DnzSpanGrams
Peso a partir de gramos (decimal). Por debajo de 1000 lo muestra en gr; a partir de ahi salta a Kg. Pensado para basculas y pesaje en TPV.
<DnzSpanGrams Value=@TPV.HeaderFacturaModel.Peso FontSize="15px" />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | decimal? | null | Peso en gramos. Si es null no pinta nada |
AutoColor | bool | false | Color segun si pasa de 1000 gr |
Class | string | "" | Clases extra para el <span> |
FontSize | string | "16px" | Tamano de fuente |
DnzTimeSpanDisplay
Pinta un TimeSpan descompuesto en partes con su etiqueta: 2d 3h 15m. Solo muestra las partes que no son cero, asi que una duracion corta sale limpia. Numero y etiqueta se estilan por separado.
<DnzTimeSpanDisplay Value=@(sesion.Fin - sesion.Inicio) ShowSeconds=true />Con texto para el caso vacio:
<DnzTimeSpanDisplay Value=@tarea.TiempoInvertido EmptyText="Sin registrar" />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | TimeSpan? | null | Duracion a descomponer. Si es null muestra EmptyText (o nada) |
ShowSeconds | bool | false | Incluye los segundos en el desglose |
EmptyText | string | "" | Texto a mostrar cuando Value es null |
NumberClass | string | "fw-semibold text-dark" | Clases para los numeros |
LabelClass | string | "text-muted small ms-1" | Clases para las etiquetas (d, h, m) |
Style | string | "" | Estilo inline del contenedor |
DnzTimeSpanDisplayCompact
El mismo desglose que DnzTimeSpanDisplay, pero con numero y etiqueta en tamano pequeno. Atajo comodo para tablas y celdas: ya trae las clases de estilo puestas.
<DnzTimeSpanDisplayCompact Value=@tarea.Duracion />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | TimeSpan? | null | Duracion a descomponer. Si es null muestra EmptyText (o nada) |
ShowSeconds | bool | false | Incluye los segundos en el desglose |
EmptyText | string | "" | Texto a mostrar cuando Value es null |
Style | string | "" | Estilo inline del contenedor |
DnzTimeSpanDisplayBadge
El mismo desglose, pero cada parte va dentro de un badge de color. Para resaltar duraciones en cabeceras o resumenes.
<DnzTimeSpanDisplayBadge Value=@sesion.Duracion />Parametros
| Parametro | Tipo | Default | Que hace |
|---|---|---|---|
Value | TimeSpan? | null | Duracion a descomponer. Si es null muestra EmptyText (o nada) |
ShowSeconds | bool | false | Incluye los segundos en el desglose |
EmptyText | string | "" | Texto a mostrar cuando Value es null |
Style | string | "" | Estilo inline del contenedor |
Patron tipico: columna de informe -> span
Estos componentes encajan directamente sobre las filas que devuelve un informe del SDK. Cada columna tiene su span.
Trae las filas con el SDK
Ejecuta un informe con el Cliente Dinaup y recorre las filas que te devuelve.
Pinta cada columna con su span
Importe -> DnzSpanMoney. Fecha -> DnzSpanDate. Duracion -> DnzSpanMinutes. Sin formatear nada a mano.
@foreach (var fila in informe.Filas)
{
<DnzSpanKV Key="Cliente" Value=@fila.Cliente @key=@fila.ID />
<DnzSpanMoney Amount=@fila.Total AutoColor=true />
<DnzSpanDate Value=@fila.Fecha ShowStatus=true />
}Deja que el null haga su trabajo
No protejas con if: si una columna viene vacia, el span no pinta nada. Menos ruido en tu marcado.
Relacionado
- KPIs y metricas — cuando el dato tipado es la cifra protagonista de una tarjeta.
- Badges y estados — para estados y etiquetas de color, no valores numericos.
- Tablas e informes — listados donde estos spans son las celdas.
- Catalogo de componentes — el resto de familias de DinaZen.
- Intro a DinaZen — como encaja la libreria con el SDK.
- Informes de Dinaup Flex — de donde salen las columnas que pintas.
- Cliente Dinaup (SDK .NET) — el que trae los datos.