A data provider is giving us dynamic report data in a SQL Server database table X. There is also a metadata table Y which holds the report count and the columns (as a semicolon separated string). In the report data table X, there is a text field which holds all the data, separated by semicolon. The provider is doing this to be dynamic, and I can’t influence that choice.
I need to:
- Load the metadata from Y
- Load the data from X for a selected report from Y
- Display the data in a table on a webpage
How would you go about reading this in the model/controller and displaying it in a webgrid/table? For models with fixed columns, this is simple, but what about when the columns are dynamic?
Current solution (feels dirty) is to parse the data into a DataTable and manually output rows and table cells in the view from this object. No use of WebGrid, MvcContrib Grid etc.
I chose to parse the table data into a specific dimensional model in my MVC application:
Base objects
Report has a list of column definitions and a row count integer. It also has a list of rows. Each row has a list of column values (cells), which is always treated as string in this code, and only displayed using the display data type from the column definition.
My data types defined are for example: text, date, number, link (many types of links to our CRM system, accountlink, userlink, orderlink). I add new data types only if I need to display them differently than the existing ones. I can imagine some day I need a chart data type (where the cell data is a list of plot points for example).
This makes the report definition very flexible, but I am probably sacrificing some performance and it is purely custom. I would still like input on this approach, but no responses in the last 6-7 months probably means this is a weird enough scenario that you, the reader, should avoid.