Tablas e informes
El puente entre el SDK y la UI: ejecutas un informe de Dinaup Flex y repartes sus filas a tabla, tarjetas, gráfica o ranking, con filtros incluidos.
Un informe de Dinaup Flex vive en el servidor: tú lo pides por su ReportId con el SDK .NET y te devuelve filas tipadas con sus columnas, formatos y totales. Esta familia coge ese resultado y lo pinta —tabla, tarjetas, gráfica o ranking— con el mismo aspecto que Play y sin que escribas una sola RadzenDataGridColumn a mano.
La decisión es una sola: ¿quieres una rejilla completa o varias vistas del mismo informe a la vez? Para lo primero, DnzReportView directo. Para lo segundo, DnzReportProvider como contenedor que carga el informe una vez y lo reparte por cascada a sus hijos.
El ReportId es el GUID del informe definido en Flex / Informes. Lo mismo que alimenta los listados de Play alimenta estos componentes.
¿Tabla suelta o dashboard?
DnzReportView resuelve el caso completo: cabecera, buscador, exportar CSV, paginación server-side y filtros por columna.
<DnzReportView Client=@Client ReportId="3f2a9c10-8b4e-4d21-9f77-1a2b3c4d5e6f" />DnzReportProvider carga el informe una vez y lo expone como cascada (ReportContext). Dentro metes las vistas que quieras, todas leyendo de la misma carga: una llamada al servidor, varias representaciones.
<DnzReportProvider Client=@Client ReportId="7c1d4e90-2f5a-41b8-bc63-9e0a1b2c3d4f">
<DnzChartView ChartType="DnzChartView.ChartTypeE.Column" />
<DnzTopN N="5" />
</DnzReportProvider>DnzReportView con OnItemSelect te da la fila pulsada como DinaupDynamicRowDTO. Es la base de los selectores relacionales y de los pickers de Play; mira Selectores si tu caso es "elige una ficha".
DnzReportView pinta una tabla por sí solo. DnzReportProvider no dibuja nada: es el grifo de datos para DnzCardList, DnzChartView y DnzTopN. No los mezcles esperando que el Provider muestre una rejilla.
DnzReportView
La tabla completa de Play a partir de un ReportId: columnas tipadas, orden multi-columna, filtros avanzados, paginación server-side, exportar CSV y doble clic para abrir la ficha.
<RadzenCard>
<DnzCardTitle Title="Facturas emitidas" Icon="receipt_long" />
<DnzReportView Client=@Client ReportId="3f2a9c10-8b4e-4d21-9f77-1a2b3c4d5e6f" OnItemSelect=@AbrirFactura />
</RadzenCard>
@code {
private async Task AbrirFactura(DinaupDynamicRowDTO fila) {
await DnzFormView.OpenAsync(DialogService, Client, fila.SectionId, fila.ID);
}
}Para embeberlo dentro de otra ficha sin barra de título ni botón de añadir:
<DnzReportView Client=@Client ReportId=@Container.TokenList ShowTitle=false ShowAdd=false />Parámetros
| Parámetro | Tipo | Por defecto | Qué hace |
|---|---|---|---|
Client | DinaupClientC | — | Requerido. Cliente del SDK que ejecuta el informe contra el servidor. |
ReportId | string | "" | Requerido. GUID del informe a cargar. |
VariablesValues | Dictionary<string, string> | — | Valores de las variables del informe; si faltan, se pregunta al usuario antes de pintar. |
QuerySearch | string | "" | Texto de búsqueda inicial. Cambiarlo en caliente recarga el informe. |
AdvancedFilter | List<FilterCondition> | — | Filtro server-side aplicado de entrada, además de los que ponga el usuario. |
Limit | int | 50 | Tamaño de página inicial. El usuario puede subirlo (25–3000). |
Orden | Dictionary<string, bool> | — | Orden inicial por columna (true = ascendente). |
ShowTitle | bool | true | Muestra la cabecera con icono, título y selector de columnas visibles. |
Title | string | "" | Sobrescribe el título; si está vacío, usa el del informe. |
ShowSearch | bool | true | Muestra el buscador de la cabecera. |
Filtrable | bool | true | Habilita los filtros por columna en las cabeceras. |
ShowAdd | bool | true | Muestra el botón "+" para crear un registro de la sección del informe. |
AdminMode | bool | false | Carga el informe en modo administrador (sin algunos filtros de visibilidad). |
ToolBarTemplate | RenderFragment | — | Contenido extra inyectado en la barra de herramientas de la rejilla. |
OnItemSelect | EventCallback<DinaupDynamicRowDTO> | — | Se dispara al seleccionar una fila. Si lo defines, sustituye la apertura automática de la ficha. |
OnDataChanged | EventCallback | — | Se dispara cada vez que el informe (re)carga sus datos. |
Las columnas visibles se recuerdan por URL + ReportId en localStorage, igual que en Play: el usuario ajusta una vez y se mantiene. Las columnas de moneda salen con DnzSpanMoney (rojo en negativos) y suma en el pie automáticamente.
Las columnas se pintan solas
No declaras columnas. DnzReportView lee el formato de cada campo del informe (DEC, INT, DATE, BOOL, texto…) y elige la plantilla adecuada: importes con DnzSpanMoney y suma en el pie, fechas en formato local, booleanos como badge Sí/No, estados con color. Tú solo le das el ReportId; el informe manda.
Lo único que personalizas por plantilla es la barra de herramientas, vía ToolBarTemplate:
<DnzReportView Client=@Client ReportId="3f2a9c10-8b4e-4d21-9f77-1a2b3c4d5e6f">
<ToolBarTemplate>
<RadzenButton Text="Acción" Icon="bolt" Size="ButtonSize.Small" Click=@HacerAlgoAsync IsBusy=@_busy />
</ToolBarTemplate>
</DnzReportView>Abrirlo sin colocarlo en el markup
DnzReportView expone dos métodos estáticos para abrirlo bajo demanda como diálogo o ventana flotante:
await DnzReportView.OpenAsync(DialogService, Client, "3f2a9c10-8b4e-4d21-9f77-1a2b3c4d5e6f", title: "Facturas");Firma real:
public static Task OpenAsync(DialogService ds, DinaupClientC client, string reportId, Dictionary<string, string> vars = null, string title = "Informe", string width = "90%", string height = "80%")DnzReportView.OpenAsWindow(WindowManager, Client, "3f2a9c10-8b4e-4d21-9f77-1a2b3c4d5e6f", title: "Facturas", icon: "receipt_long");Firma real:
public static string OpenAsWindow(DnzWindowManagerService wm, DinaupClientC client, string reportId, Dictionary<string, string> vars = null, string title = "Informe", string icon = "analytics")DnzReportProvider
Contenedor "headless": carga el informe una vez y lo reparte por cascada a sus hijos vía ReportContext. No dibuja tabla; es el grifo de datos para dashboards con varias vistas del mismo informe.
<DnzReportProvider Client=@Client ReportId="7c1d4e90-2f5a-41b8-bc63-9e0a1b2c3d4f">
<div class="d-flex flex-column gap-3">
<DnzChartView ChartType="DnzChartView.ChartTypeE.Bar" />
<DnzTopN N="5" />
<DnzCardList MaxFields="3" />
</div>
</DnzReportProvider>Las vistas hijas van dentro de ChildContent (el contenido entre las etiquetas del Provider), así que es un RenderFragment: metes el markup que quieras y las vistas leen el contexto por cascada.
Parámetros
| Parámetro | Tipo | Por defecto | Qué hace |
|---|---|---|---|
Client | DinaupClientC | — | Requerido. Cliente del SDK que ejecuta el informe. |
ReportId | string | "" | Requerido. GUID del informe a cargar. |
VariablesValues | Dictionary<string, string> | — | Valores de las variables del informe; si faltan, se pregunta antes de pintar los hijos. |
QuerySearch | string | "" | Búsqueda aplicada a la carga. |
AdvancedFilter | List<FilterCondition> | — | Filtro server-side aplicado a la carga. |
Limite | int | 500 | Número de filas que trae para alimentar los hijos. |
Orden | Dictionary<string, bool> | — | Orden de las filas que se cargan. |
AdminMode | bool | false | Carga el informe en modo administrador. |
ChildContent | RenderFragment | — | Las vistas que consumen el contexto (tarjetas, gráficas, ranking). |
OnDataLoaded | EventCallback | — | Se dispara cuando termina la carga del informe. |
El Provider analiza las columnas del informe y deja preparado el mapeo del ReportContext (qué columna es la numérica principal, cuál es la de categoría/estado, cuál es de moneda…). Por eso DnzChartView, DnzTopN y DnzCardList funcionan sin que les digas qué columna pintar: lo adivinan del informe. Si no aciertan, se lo fuerzas con ValueColumn / CategoryColumn.
DnzCardList
Pinta las filas del informe como tarjetas en vez de rejilla: título, una imagen de preview si la fila la trae, unos pocos campos y el importe destacado. Va dentro de un DnzReportProvider.
<DnzReportProvider Client=@Client ReportId="7c1d4e90-2f5a-41b8-bc63-9e0a1b2c3d4f">
<DnzCardList MaxFields="4" OnItemSelect=@AbrirFicha />
</DnzReportProvider>
@code {
private async Task AbrirFicha(DinaupDynamicRowDTO fila) {
await DnzFormView.OpenAsync(DialogService, Client, fila.SectionId, fila.ID);
}
}Parámetros
| Parámetro | Tipo | Por defecto | Qué hace |
|---|---|---|---|
MaxFields | int | 4 | Cuántos campos secundarios muestra cada tarjeta (sin contar el título ni el importe). |
OnItemSelect | EventCallback<DinaupDynamicRowDTO> | — | Se dispara al pulsar una tarjeta. Si lo defines, sustituye la apertura automática de la ficha. |
Además acepta atributos extra (class, style, data-*…) que se aplican al div raíz de la lista.
La columna de moneda y el campo principal los elige el componente leyendo el mapeo del informe: el importe sale destacado a la derecha con DnzSpanMoney, las fechas en formato local y los estados con badge de color. Si la fila trae imagen de preview, la pinta redonda o cuadrada según el propio dato.
DnzChartView
Gráfica del informe (columnas, barras, líneas, área o tarta) agrupando por una categoría y sumando una métrica. Vive dentro de DnzReportProvider.
<DnzReportProvider Client=@Client ReportId="7c1d4e90-2f5a-41b8-bc63-9e0a1b2c3d4f">
<DnzChartView ChartType="DnzChartView.ChartTypeE.Column" CategoryColumn="cliente" ValueColumn="total_facturado" MaxItems="12" />
</DnzReportProvider>Parámetros
| Parámetro | Tipo | Por defecto | Qué hace |
|---|---|---|---|
ChartType | ChartTypeE | Column | Tipo de gráfica: Column, Bar, Line, Area o Pie. |
ValueColumn | string | — | Keyword de la métrica a representar. Si lo omites, usa la numérica principal del informe. |
CategoryColumn | string | — | Keyword de la categoría del eje X. Si lo omites, usa la columna de estado o la primera de texto. |
MaxItems | int | 20 | Máximo de categorías (las de mayor valor); el resto se descarta. |
Además acepta atributos extra que se aplican al div raíz de la gráfica.
ChartTypeE es un enum anidado del propio componente, por eso en el markup va como DnzChartView.ChartTypeE.Column. Las filas se agrupan por CategoryColumn y se suma ValueColumn por grupo, así que un informe de líneas de factura se convierte en "total por cliente" sin más.
DnzTopN
Ranking visual de barras horizontales con las N filas de mayor (o menor) valor del informe. Va dentro de un DnzReportProvider.
<DnzReportProvider Client=@Client ReportId="7c1d4e90-2f5a-41b8-bc63-9e0a1b2c3d4f">
<DnzTopN N="5" ValueColumn="total_facturado" />
</DnzReportProvider>Parámetros
| Parámetro | Tipo | Por defecto | Qué hace |
|---|---|---|---|
N | int | 10 | Cuántas filas mostrar en el ranking. |
ShowTitle | bool | true | Muestra la cabecera "Top N — Columna". |
ValueColumn | string | — | Keyword de la columna a rankear. Si lo omites, usa la numérica principal del informe. |
Ascending | bool | false | true para mostrar los valores más bajos primero. |
Si la columna es de tipo moneda o minutos, el valor se formatea solo con DnzSpanMoney / DnzSpanMinutes. No tienes que indicar el formato: lo hereda del informe. Si el informe no tiene ninguna columna numérica representable, DnzTopN no pinta nada.
DnzFilter
El sistema de filtros por columna de DnzReportView. No lo colocas tú: la propia tabla lo inserta en la cabecera de cada columna y elige el filtro adecuado según el tipo del campo.
<FilterTemplate Context="data">
<DnzFilter Column=@col DataColumn=@data />
</FilterTemplate>Parámetros
| Parámetro | Tipo | Por defecto | Qué hace |
|---|---|---|---|
Column | DinaupFieldDTO | — | Definición de la columna del informe (tipo, formato, valores predefinidos). |
DataColumn | RadzenDataGridColumn<DinaupDynamicRowDTO> | — | La columna de la rejilla a la que se ata el filtro. |
DnzFilter es un router: según el formato de la columna delega en el filtro especializado correspondiente. La familia completa:
| Filtro | Cuándo entra |
|---|---|
DnzTextFilter | Texto libre (por defecto). |
DnzIntegerFilter | Columnas INT. |
DnzDecimalFilter | Columnas DEC. |
DnzDateFilter / DnzDateTimeFilter / DnzTimeFilter | Fechas, fecha-hora y hora. |
DnzBoolFilter | Booleanos. |
DnzBadgeFilter | Columnas con estilo de badge. |
DnzPredefinedFilter | Columnas con lista de valores predefinidos. |
No documentamos cada filtro por separado porque no los instancias a mano: pones DnzReportView y el filtro correcto aparece según el informe. El concepto de filtrado server-side y cómo definir filtros de entrada vive en Flex / Informes.
Leer una fila
Las filas que reparten estos componentes son DinaupDynamicRowDTO. Para sacar el texto de una columna usa .GetLegible("columna"); ID y SectionId vienen rellenos para abrir la ficha.
@code {
private async Task AbrirFila(DinaupDynamicRowDTO fila) {
var nombre = fila.GetLegible("cliente");
await DnzFormView.OpenAsync(DialogService, Client, fila.SectionId, fila.ID);
}
}Relacionado
- Selectores — cuando el caso es "elige una ficha" a partir de un informe.
- KPIs y métricas — cifras y comparativas para completar el dashboard.
- Datos tipados (Spans) —
DnzSpanMoney,DnzSpanMinutesy demás, lo que estas vistas usan por dentro. - Cookbook de patrones — recetas de extremo a extremo que combinan estos componentes con el SDK.
- Informes de Dinaup Flex — qué es un informe, su
ReportId, variables y filtros. · Filtrar un informe por rango de fechas - SDK / Cliente Dinaup — cómo ejecutar el informe con
Report_GetAsync.
Selectores
Los selectores canónicos de Dinaup: enum, valores en memoria, búsqueda contra informe remoto y picker en diálogo.
Inputs y formularios
Inputs para capturar y editar datos: búsqueda con debounce, subida de ficheros, editor de texto rico, editor de imagen, listas de etiquetas, pares clave/valor, pasos y el formulario dinámico de Flex.