Windows Forms

Création et édition d’un rapport sous visual studio 2010

J’ai passé cette fin de semaine à travailler sur la création des rapports incluant des données issues de l’entity framework 4.5 sous visual studio 2010.

Après avoir fait des recherches dans ce sens, j’ai trouvé plusieurs exemples de binding du ReportViewer mais qu’en utilisant le DataSet et non l’Entity Framework. D’où ce post.

Ici, nous allons créer un fichier de définition de rapport client (.rdlc) dans une application WinForms.

Pour ce faire, créons un nouveau projet Windows Form Application que nous nommons « ReportSample » sous VS 2010.

1

Insertion de 2 folders dans la solution :

  • AppData : pour l’Entity Framework
  • Reports : contiendra les fichiers .rdlc

2

Après avoir rajouté et configuré l’EF, la solution doit ressembler à ça :

3

Si vous ne savez pas configurer l’EF, vous avez toutes les étapes sur ce post : Changer dynamiquement une connectionString même après le déploiement de l’application (https://nordinemhoumadi.wordpress.com/application-development-2/windows-forms/).

Nous allons maintenant créer notre fichier Report (.rdlc) dans le repository « Reports » en utilisant le Report Wizard. A savoir que c’est dans ce fichier que figurera la mise en forme de notre rapport.

4 5

Ce rapport va nous permettre d’afficher la liste des Fournisseurs tout simplement.

6

Le Wizard nous propose de choisir une source de données. Nous choisissons comme type l’Object car l’EF génère automatiquement les tables, vues … de la database sous forme d’objets.

7

Nous choisissons comme objet : Fournisseurs puis on clique sur « Finish »

8

La fenêtre « Dataset Properties » apparait. Nommons notre Dataset : DataSetFournisseurs

La Data Source à choisir c’est « ReportSample.AppData » et l’Available DataSets : « Fournisseur »

9

En cliquant sur « Next », la fenêtre Arrange Fields apparait. Elle permet d’arranger les champs des lignes, colonnes et les champs à afficher dans notre rapport.

Vu que nous voulons afficher que la liste des fournisseurs, nous allons faire un drag and drop du champ « RaisonSocial » vers la « Values Box » et cliquer sur « Next »

10

Etant donné que notre rapport est basic (aucun champ de calcul), nous n’avons pas besoin de la partie « Choose Layout »

11

Le Wizard nous propose de choisir un style pour l’affichage des données. A noter que nous pouvons customiser la mise en forme dans le ficher .rdlc grâce aux contrôles de la boite à outils.

12

Notre rapport Fournisseur est enfin créé !!!

13

Nous allons maintenant paramétrer le contrôle ReportViewer. Pour ce faire, nous allons l’ajouter à notre fenêtre Form1 du projet.

14 15

Nous affections le rapport Fournisseurs.rdlc au ReportViewer

16

Dans la partie code behind de Form1, rajoutons ces namespaces :

using ReportSample.AppData;

using Microsoft.Reporting.WinForms;

Et dans l’évènement Form1_Load ce code :

GTAppliEntities con = new GTAppliEntities();

         //Requête LINQ pour récupérer la liste des fournisseurs

            var _fournisseursList = (from f in con.Fournisseurs select f).ToList();

            System.Windows.Forms.BindingSource ReportBindingSource = new System.Windows.Forms.BindingSource();

            ReportBindingSource.DataSource = _fournisseursList;

            reportViewer1.LocalReport.ReportEmbeddedResource = « ReportSample.Reports.Fournisseurs.rdlc »;

            reportViewer1.LocalReport.DataSources.Add(new ReportDataSource(reportViewer1.LocalReport.GetDataSourceNames()[0], ReportBindingSource));

            reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;

            this.reportViewer1.RefreshReport();

En exécutant l’application voici le résultat :

17

Comme nous pouvons le constater, notre ReportViewer nous permet d’avoir une vision sur le rapport Fournisseurs.rdlc.

Ce contrôle permet également d’imprimer directement le rapport ou de l’enregistrer dans un format PDF, XLS ou Doc.

En espérant que ce topic vous sera utile !!! :)…Bien sur les suggestions et propositions sont les bienvenues !!! 🙂

Changer dynamiquement une connectionString même après déploiement de l’application

Actuellement, je développe une application client lourd chez un client dans un environnement WinForms (VS 2010) et SQL SERVER 2008 R2.

Avant qu’un utilisateur puisse utiliser l’application, le système doit détecter si la base de données existe, et si c’est pas le cas l’utilisateur devra la paramétrer.

Dans ce module, je vais vous montrer comment changer la connectionString dynamiquement en utilisant l’Entity Framework 4.5 même après le déploiement de la solution.

Nous allons dans un premier temps créer un nouveau projet que nous allons nommer « ChangeConnectionStringsDynamically » sous Visual Studio 2010 :

1

Nous intégrons et paramétrons ensuite notre ADO.NET Entity Data Model que nous  appellerons « Model.edmx » :

2 3 4 5

A noter que dans cet atelier ma database est déjà créée, j’ai pas utilisé le code first Model (cf mon post sur l’entity framework 4.5 : Code First Model).

6 7

Après avoir fini la configuration de mon Entity data model, je créé ma fenêtre qui me permettra de changer dynamiquement le nom du serveur et de la base de données:

8

Jetons un coup d’œil sur le fichier App.config (il s’agit d’un fichier XML qui contient la configuration de notre application) :

9

Comme nous pouvons le constater, les values des Data Source (Nom du serveur) et de l’Initial Catalog (Nom de la database) ont les valeurs que nous avons choisies lors du paramétrage de l’ADO.NET Enitity Data Model.

Nous allons maintenant changer ses valeurs dynamiquement :

Accéder à la view code de la fenêtre « Form1 » et insérer une instance de la connexion « GTAppliEntities»

11

Vérifions que nous avons bien les namespaces suivants, sinon rajoutons les :

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Configuration;

using System.Data.EntityClient;

using System.Data.SqlClient;

using ChangeConnectionStringsDynamically.Properties;

using System.Security.Principal;

Nous créons une procédure qui permettra d’attribuer les nouvelles valeurs du serveur et de la base de données :

public void SetDbConnection(string ServerName, string DatabaseName)

{

dynamic curConnection = ConfigurationManager.ConnectionStrings[« GTAppliEntities »];

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(curConnection.ConnectionString);

dynamic curConnString = entityBuilder.ProviderConnectionString;

//Récupère le nom du serveur actuel dans la connectionString

SqlConnectionStringBuilder sqlConnBuilder = new SqlConnectionStringBuilder();

sqlConnBuilder.ConnectionString = curConnString;

sqlConnBuilder.DataSource = ServerName;

sqlConnBuilder.InitialCatalog = DatabaseName;

dynamic newProviderString = sqlConnBuilder.ToString();

entityBuilder.ProviderConnectionString = newProviderString;

try

{

using (EntityConnection conn = new EntityConnection(entityBuilder.ToString()))

{

conn.Open();

conn.Close();

};

Settings.Default.DatabaseServer = ServerName;

Settings.Default.DatabaseName = DatabaseName;

Settings.Default.Save();

UpdateEntityConnection(entityBuilder.ToString());

MessageBox.Show(« La connexion avec la base de données a changé »);

}

catch (Exception)

{

MessageBox.Show(« La connexion avec la base de données a échoué »);

}

}

Et une autre qui s’occupera de l’updating sur le fichier App.config

private void UpdateEntityConnection(string NewConnectionString)

{

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

config.ConnectionStrings.ConnectionStrings[« GTAppliEntities »].ConnectionString = NewConnectionString;

config.Save();

ConfigurationManager.RefreshSection(« connectionStrings »);

}

Ensuite dans l’évènement On_Click du bouton « OK », nous appelons la procédure « SetDbConnection » en lui attribuant comme paramètres les valeurs txtServeurName et txtDatabaseName des textboxes

private void btnOK_Click(object sender, EventArgs e)

{

SetDbConnection(txtServeurName.Text.ToString(), txtDatabaseName.Text.ToString());

}

Et voilà le tour est joué !!!…J’espère que ce topic vous servira…et n’hésitez pas si vous avez des suggestions !!!

Publicités

5 commentaires sur “Windows Forms

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s