Actualmente estoy refacturando una aplicación de consola cuya principal responsabilidad es generar un informe basado en los valores almacenados en la base de datos.¿Cómo creo un informe html sin hardcoding html?
La forma en que he estado creando el informe arriba hasta ahora es el siguiente:
const string format = "<tr><td>{0, 10}</td><td>
{1}</td><td>{2, 8}</td><td>{3}</td><td>{4, -30}</td>
<td>{5}</td><td>{6}</td></tr>";
if(items.Count > 0)
{
builder.AppendLine(
String.Format(format, "Date", "Id", "WorkItemId",
"Account Number", "Name", "Address", "Description"));
}
foreach(Item item in items)
{
builder.AppendLine(String.Format(format, item.StartDate, item.Id,
item.WorkItemId, item.AccountNumber,
String.Format("{0} {1}",
item.FirstName, item.LastName),
item.Address, item.Description));
}
string report = String.Format("<html><table border=\"1\">{0}
</table></html>",
builder.ToString());
(Lo anterior es sólo una muestra ... y lo del formato ... He intentado darle formato por lo que no requeriría desplazamiento horizontal ....)
Realmente no me gusta de esa manera lo he hecho. Funciona y hace el trabajo por ahora ... pero no creo que pueda mantenerse ... especialmente si el informe se vuelve más complejo en términos del html que debe crearse. Peor aún, otros desarrolladores de mi equipo seguramente copiarán y pegarán mi código para sus aplicaciones que generan un informe html y es probable que creen un lío horrible. (¡Ya he visto tales horrores producidos! Imagine una función de informe que tiene cientos de líneas de sql codificadas para recuperar los detalles del informe ... ¡es suficiente para hacer llorar a un hombre adulto!)
Sin embargo, mientras No me gusta esto en absoluto ... Simplemente no puedo pensar en una forma diferente de hacerlo.
Seguramente debe haber una manera de hacer esto ... estoy seguro de ello. No hace mucho estaba haciendo lo mismo al generar tablas en páginas aspx hasta que alguien me mostró gentilmente que puedo vincular los objetos a un control y dejar que .NET se encargue de la representación. Convirtió el código horrible, similar al código anterior, en dos o tres elegantes líneas de bondad.
¿Alguien sabe de una manera similar de crear el html para este informe sin codificar el html?
Voy a intentarlo y ver cómo voy. Nunca he trabajado con XSLT antes, así que me tomará un poco de tiempo acelerarlo ... Además, esperaré a seleccionar una respuesta hasta que la haya visto en acción ... – mezoid