If you want to generate PDF or XPS in Silverlight you would have to round-trip back to the server. There are multiple frameworks and tools available to do PDF generation in .NET.
However, I wouldn't abandon the idea of generating HTML to do printing in Silverlight 2. I think this is an excellent idea, and I don't consider web printing broken. HTML with CSS print style sheets can be really usefull.
I recently did a blog post describing how to use the ASP.NET AJAX 4.0 Client Templates to generate HTML on the client using Silverlight 2. It shouldn't be to hard to write a piece of C# code to convert any data grid to a HTML table.
However, if you know what kind of objects you're displaying in the data grid you could simply generate the HTML your self based on your object structure.
You have multiple options for generating HTML in Silverlight:
You pass HTML back to the browser using the HTML Bridge (google for it for more information).
You should also check out my blog post for a comprehensive overview of printing options in Silverlight.