2010-07-14 4 views
1

Je développe une application dans WPF dans laquelle je dois générer et afficher des rapports. J'utilise RDLC pour générer et afficher des rapports. Les exigences relatives aux rapports sont les suivantes:Enregistrer et recharger le rapport rdlc enregistré

  1. Doit générer et afficher un rapport.
  2. L'utilisateur doit pouvoir enregistrer le rapport (il n'a pas spécifié le format pour enregistrer le rapport).
  3. L'utilisateur doit pouvoir charger et afficher le rapport enregistré.

Ce que je fais actuellement, c'est que je génère un fichier pdf temporaire à partir du fichier RDLC pour afficher le rapport. Si l'utilisateur souhaite enregistrer le rapport, le rapport sera enregistré au format PDF, sinon le fichier PDF temporaire sera supprimé. Et quand l'utilisateur veut charger le rapport enregistré, il peut, comme c'est le format PDF.

Dans le programme, j'utilise le contrôle "winformhost" dans WPF pour afficher le rapport. Un contrôle ReportViewer est également utilisé.

Mais le problème auquel je suis confronté est qu'il est plutôt lent d'afficher un rapport puisque nous utilisons aussi le contrôle "winformhost" et le format PDF.

Ma question est: Comment puis-je augmenter les performances si j'utilise cette logique de génération et d'affichage du rapport en format PDF? Si ce n'est pas possible, y a-t-il un autre moyen de sauvegarder le rapport et de le recharger quand je veux, ce qui augmente le processus de production du rapport?

Merci à l'avance, Anish

+0

Je ne pense pas que ce soit une bonne idée de rouvrir un rapport enregistré dans votre application; Il vaut mieux demander à l'utilisateur de regénérer le rapport à chaque fois afin d'avoir les dernières données. L'utilisateur peut toujours enregistrer le rapport dans l'un des formats supportés par SSRS (pdf, excel, tiff etc.) et l'ouvrir pour le voir à nouveau. – akjoshi

Répondre

0

À mon avis, vous pouvez augmenter vos performances en séparant les préoccupations. Par là je veux dire, il est préférable de générer l'ensemble de données pour le rapport de votre classe personnalisée plutôt que directement à partir de DB. Par exemple si je veux que mon rapport indique: l'année de la commande - le nombre total de commandes - client.

Je vais créer une classe comme

class CustomerStatistics 
{ 
    public int OrderYear {get;set;} 
    public int OrderQty {get;set;} 
    public string CustomerName {get;set;} 

} 

Une fois que vous avez fait cela, vous pourrez profiter des avantages du multi-threading. Par exemple, je sais que le calcul de OrderQty prendra du temps, donc je l'ai mis dans un fil séparé. En outre, vous pouvez augmenter vos performances en créant des procédures stockées pour certains calculs lourds dans lesquels vous devez parcourir un grand ensemble de données. Si c'est le cas, vous devez utiliser des opérations set comme INTERSECT, EXCEPT, etc. pour optimiser les requêtes.

C'était une partie de mes pensées.

Cheers.