As i am reading through these answers i can't help but note that all the answers and libraries etc. are pretty complicated for the smaller applications. Hence i would like to suggest T4T Text Templates.
Here is a tutorial for Writing one. It does not need any libraries that aren't included in visual studio. If you don't need overly complex templates or reports it might be worth to take a peek.
Template code example:
<#@ template language="C#" #>
<html><body>
<h1>Sales for Previous Month</h2>
<table>
<# for (int i = 1; i <= 10; i++)
{ #>
<tr><td>Test name <#= i #> </td>
<td>Test value <#= i * i #> </td> </tr>
<# } #>
</table>
This report is Company Confidential.
</body></html>
In your application code, you can generate the content of your template using a call like this:
MyWebPage page = new MyWebPage();
String pageContent = page.TransformText();
System.IO.File.WriteAllText("outputPage.html", pageContent);