Как установить источник данных для полей в XtraReports, не имея набора данных во время разработки?

Сейчас я заглядываю в инструмент отчетности XtraReports, но кое-что еще не понимаю.

Как мне установить источник данных для определенного поля (показанного в отчете как ярлык, я думаю), без необходимости создавать соединение, адаптер и набор данных во время разработки, а делать это программно.

Например, у меня может быть таблица под названием «Пользователь» с 3 полями: UserId, Username и Password. В дизайнере отчетов я помещаю 3 метки (и вот мой вопрос), устанавливаю источник данных для отображения 3 полей базы данных. Затем в коде позади я создаю соединение, выполняю команду, заполняю набор данных, создаю экземпляр отчета, передаю ему данные и показываю предварительный просмотр отчета.

Это возможно? Дайте мне знать, если это недостаточно ясно.

Спасибо!


person Sebastian    schedule 07.08.2009    source источник


Ответы (5)


Вы можете установить свойство DataSourceSchema вашего отчета на схему XML, которая представляет ваш DataSource. Это позволит вам использовать конструктор отчетов для установки привязок данных во время разработки, не устанавливая каждый раз соединение с базой данных.

Вот как я это делаю: как только мой запрос отчета в основном завершен, я запускаю код один раз с вызовом

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

Затем в дизайнере отчетов я устанавливаю свойство DataSourceSchema отчета для вновь созданного файла. Это заполнит вкладку списка полей конструктора отчетов, чтобы вы могли выполнить привязку во время разработки. Таким образом, у вас должен быть действительный источник данных только один раз (или каждый раз, когда вы меняете столбцы). Вы определенно можете использовать подход Прземааса и выполнять все привязки данных в коде, но я предпочитаю позволить дизайнеру выполнять большую часть работы.

person Kyle Gagnet    schedule 07.08.2009
comment
Что-то вроде этого я и искал, спасибо, Кайл! Я думаю, что могу создать очень маленькое приложение, которое получает sql и записывает xml, чтобы сделать это немного быстрее. - person Sebastian; 07.08.2009

Создавая отчет без набора данных, вы должны использовать объект IList ... так что следуйте этому хорошему руководству

Как: привязать веб-отчет к списку массивов https://documentation.devexpress.com/#XtraReports/CustomDocument3851.

person Jalal El-Shaer    schedule 31.03.2010
comment
Спасибо, jalchr, это то, что я искал. Я уже решил несколько месяцев назад, но спасибо! - person Sebastian; 01.04.2010

Да, это возможно. Вы можете определить необходимые привязки данных в коде:

this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa"));
  • Текст здесь - это свойство класса XrLabel. Я предполагаю, что вы хотите отображать связанное поле как текст в метке.
  • данные - это ваш объект с данными
  • «Имя» - это имя поля, которое вы хотите отобразить.
  • "aaa" - это формат отображения, применимый в случае, если вы хотите отображать значения с настраиваемым форматированием.

По сути, привязки данных в XtraReport действуют примерно так же, как привязки данных в стандартных окнах.

Дайте мне знать, если вам нужны дополнительные рекомендации

person Przemaas    schedule 07.08.2009
comment
+1 Przemaas за то, что показал мне программный способ сделать это, хотя у меня такое чувство, что это немного запутанно, вам не кажется? У вас должна быть возможность напрямую редактировать источник данных элемента управления меткой. Спасибо! - person Sebastian; 07.08.2009

Вот альтернатива ..

rtpObject.DataSourceSchema = dataSet.GetXmlSchema();
person Appyks    schedule 06.07.2013

перед тем, как сделать это свойство модификатора набора как общедоступное

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
person Vinayak    schedule 20.11.2013