Как установить источник данных для полей в XtraReports, не имея набора данных во время разработки?
-
12-09-2019 - |
Вопрос
Сейчас я просматриваю инструмент создания отчетов XtraReports, и есть кое-что, чего я пока не понимаю.
Как мне установить источник данных для определенного поля (я полагаю, показанного в отчете в виде метки), без необходимости создавать соединение, адаптер и набор данных во время разработки, но делая это программно.
Например, у меня может быть таблица под названием "User" с 3 полями:Идентификатор пользователя, Имя пользователя и пароль.В конструкторе отчетов я размещаю 3 метки (и вот мой вопрос), устанавливающие источник данных для отображения 3 полей базы данных.Затем, в приведенном ниже коде, я создаю соединение, выполняю команду, заполняю набор данных, создаю экземпляр отчета, передаю ему datatable и показываю предварительный просмотр отчета.
Возможно ли это?Дайте мне знать, если это будет недостаточно ясно.
Спасибо!
Решение
Вы могли бы присвоить свойству DataSourceSchema вашего Отчета значение XML-схемы, представляющей ваш источник данных.Это позволит вам использовать конструктор отчетов для установки привязок данных во время разработки, не устанавливая каждый раз подключение к базе данных.
Вот как я это делаю:Как только мой запрос к отчету в основном завершен, я запускаю код один раз с вызовом
myDataSet.WriteXml("C:\myDataSourceSchema.xml", System.Data.XmlWriteMode.WriteSchema)
Затем в конструкторе отчетов я устанавливаю свойство DataSourceSchema отчета для вновь созданного файла.Это позволит заполнить вкладку "Список полей дизайнера отчетов", чтобы вы могли выполнить привязку во время разработки.Таким образом, у вас должен быть действительный источник данных только один раз (или каждый раз, когда вы меняете свои столбцы).Вы определенно все еще можете использовать подход Пшемааса и выполнять все свои привязки данных в коде, но я предпочитаю, чтобы дизайнер выполнял большую часть работы.
Другие советы
Создавая отчет без набора данных, вы бы использовали объект IList ...так что следуйте этому замечательному руководству
Как сделать:Привязать веб-отчет к списку массивов https://documentation.devexpress.com/#XtraReports/CustomDocument3851
Да, это возможно.Вы можете определить необходимые привязки к данным в коде:
this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa"));
- Текст здесь является свойством класса XrLabel .Я предполагаю, что вы хотите отобразить связанное поле в виде текста в label.
- данные - это ваш объект с данными
- "Name" - это название поля, которое вы хотите отобразить
- "aaa" - это формат отображения, применимый в случае, если вы хотите отображать значения с пользовательским форматированием
По сути, привязки данных в XtraReport действуют практически так же, как стандартные привязки данных Windows forms.
Дайте мне знать, если вам нужны дополнительные рекомендации
Вот альтернативный вариант..
rtpObject.DataSourceSchema = dataSet.GetXmlSchema();
перед выполнением этого установите свойство модификатора как общедоступное
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
XRBinding binding = new XRBinding("Text", ageingBindingSource, "ageing_contactsLookup.name");
this.xrLabel19.DataBindings.Add(binding);
// или //
XRBinding binding = new XRBinding("Text", dbaDataSet, "transactions.fk_transitems_transactionid.name2");
this.xrTableCell1.DataBindings.Add(binding);