Actually there isn't any easy way to do this. I'm trying to do the same thing with XtraPivotGrid on Windows Application but the result is still the same.
I was thinking to create an IList of items and let the items query itself from the MSSQL and return data with datareader then dispose itself but that didn't go well neither. That solution resulted RowCount * ColumnCount = nDataReaders and eventually it didn't do any good for memory and kept me waited for long time to return the query.
After tried every possible way, i've always been told to use Analysis Services. And i realise unless they do an implementation for datareader which helps pivot to calculate per row, it is not possible.
If you figure out a way please let me know.