2009-08-07 6 views
10

Je jette un coup d'oeil maintenant à l'outil de rapport de XtraReports et il y a quelque chose que je ne comprends pas encore. Comment puis-je définir la source de données pour un certain champ (affiché dans le rapport comme une étiquette je suppose), sans avoir à construire une connexion, un adaptateur et un ensemble de données au moment du design mais le faire par programmation. Par exemple, je peux avoir une table appelée "Utilisateur" avec 3 champs: UserId, Nom d'utilisateur et Mot de passe. Dans le concepteur de rapport, je place 3 étiquettes (et voici ma question) définir la source de données pour montrer les 3 champs de base de données. Puis, dans le code derrière, je crée une connexion, exécute une commande, remplis un jeu de données, crée une instance de rapport, lui passe la datatable et montre l'aperçu du rapport.Comment définir la source de données pour les champs dans XtraReports sans avoir de jeu de données au moment du design?

Est-ce possible? Faites-moi savoir si ce n'est pas assez clair.

Merci!

Répondre

12

Vous pouvez définir la propriété DataSourceSchema de votre rapport à un schéma XML qui représente votre DataSource. Cela vous permettra d'utiliser le Concepteur de rapports pour définir vos liaisons de données au moment de la conception sans établir de connexion à la base de données à chaque fois.

Voilà comment je le fais: Une fois que j'ai mon rapport demande la plupart du temps finalisé, j'exécuter le code une fois avec un appel à

myDataSet.WriteXml("C:\myDataSourceSchema.xml", System.Data.XmlWriteMode.WriteSchema) 

ensuite dans le concepteur de rapport, je mis la propriété DataSourceSchema du rapport à la nouvelle fichier créé. Cela remplira l'onglet Liste des champs du Concepteur de rapports afin que vous puissiez lier lors de la conception. De cette façon, vous devez seulement avoir une source de données valide une fois (ou chaque fois que vous changez vos colonnes). Vous pouvez certainement toujours faire l'approche de Przemaas et faire toutes vos liaisons de données dans le code, mais je préfère laisser le concepteur gérer la plupart du travail.

+0

Quelque chose comme ça est ce que je cherchais, merci Kyle! Je pense que je peux construire une très petite application qui obtient un sql et écrit un xml afin de le faire un peu plus vite. – Sebastian

5

Oui, c'est possible. Vous pouvez définir DataBindings nécessaires dans le code:

this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa")); 
  • texte est bien ici sur la classe XrLabel . Je suppose que vous voulez afficher le champ lié comme texte dans l'étiquette.
  • données est votre objet avec des données
  • « Nom » est le nom du champ que vous souhaitez afficher
  • « aaa » est le format d'affichage, applicable au cas où vous souhaitez afficher les valeurs avec mise en forme personnalisée

Fondamentalement, les liaisons de données dans XtraReport agissent à peu près de la même manière que les liaisons de données de formulaires Windows standard.

Permettez-moi est plus vous avez besoin des directives

+0

+1 Przemaas pour me montrer le chemin de le faire programatically, bien que J'ai le sentiment que c'est un peu en train de converser, tu ne penses pas? Vous devriez pouvoir éditer la source de données d'un contrôle d'étiquette directement. Merci! – Sebastian

2

Voici une alternative ..

rtpObject.DataSourceSchema = dataSet.GetXmlSchema(); 
1

avant de faire cette propriété de modification définie comme publique

InvoicePrinting_Rpt InvoicePrintingRpt = new InvoicePrinting_Rpt();//report object 

InvoicePrintingRpt.BillDetails.Report.DataSource = ds_Invoice; 
InvoicePrintingRpt.Report.DataMember = ds_Invoice.Tables[0].TableName; 
//bellow third parameter as your column name. 
InvoicePrintingRpt.lbl_BillHead.DataBindings.Add("Text", null, "BILL_DESCRIPTION"); 
InvoicePrintingRpt.lbl_Det_Date.DataBindings.Add("Text", null, "TRANSACTION_DATE"); 
InvoicePrintingRpt.lbl_ISINCode.DataBindings.Add("Text", null, "ISIN_CODE"); 

ReportViewer1.Report = InvoicePrintingRpt;//assign report obj 
ReportViewer1.Report.Name = "DevExpress_Reports.InvoicePrinting_Rpt"; 
ReportViewer1.DataBind(); //binding 
1
XRBinding binding = new XRBinding("Text", ageingBindingSource, "ageing_contactsLookup.name"); 
this.xrLabel19.DataBindings.Add(binding); 

// ou //

XRBinding binding = new XRBinding("Text", dbaDataSet, "transactions.fk_transitems_transactionid.name2"); 
this.xrTableCell1.DataBindings.Add(binding); 
Questions connexes