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

StackOverflow https://stackoverflow.com/questions/1242825

  •  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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top