Como definir o DataSource para campos em XTRAREports sem ter um conjunto de dados no tempo de design?

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

  •  12-09-2019
  •  | 
  •  

Pergunta

Estou dando uma olhada agora na ferramenta de relatórios do XTRAREPORTS e há algo que ainda não entendo.

Como defino a fonte de dados para um determinado campo (mostrado no relatório como um rótulo, eu acho), sem precisar criar uma conexão, adaptador e conjunto de dados no tempo de design, mas fazê -lo programaticamente.

Por exemplo, posso ter uma tabela chamada "Usuário" com 3 campos: UserID, Nome de usuário e senha. No relatório Designer, coloco 3 rótulos (e aqui está minha pergunta) Defina o DataSource para mostrar os 3 campos de banco de dados. Em seguida, no código por trás, crio uma conexão, executo um comando, preencha um conjunto de dados, crio uma instância de relatório, passo o datatable para ele e mostro a visualização do relatório.

Isso é possível? Deixe -me saber se não estiver claro o suficiente.

Obrigado!

Foi útil?

Solução

Você pode definir a propriedade DataSourcesChema do seu relatório como um esquema XML que representa sua fonte de dados. Isso permitirá que você use o designer do relatório para definir suas ligações de dados no tempo de design sem estabelecer uma conexão com o banco de dados a cada vez.

Veja como eu faço: uma vez que minha consulta de relatório finalizada principalmente, eu corro o código uma vez com uma chamada para

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

Então, no designer do relatório, eu defino a propriedade DataSourcesChema do relatório para o arquivo recém -criado. Isso preencherá a guia Lista de campo do designer do relatório para que você possa vincular no tempo de design. Dessa forma, você só precisa ter uma fonte de dados válida uma vez (ou sempre que alterar suas colunas). Definitivamente, você ainda pode fazer a abordagem de Przemaas e fazer todas as suas ligações de dados no código, mas prefiro deixar o designer lidar com a maior parte do trabalho.

Outras dicas

Construindo um relatório sem um conjunto de dados, você usaria um objeto ilist ... então siga este bom tutorial

Como: vincular um relatório da web a uma lista de matrizes https://documentation.devexpress.com/#xtraReports/customdocument3851

Sim, é possível. Você pode definir os bancos de dados necessários no código:

this.xrLabel1.DataBindings.Add(new DevExpress.XtraReports.UI.XRBinding("Text", data, "Name", "aaa"));
  • O texto aqui está a propriedade na classe XRLabel. Presumo que você deseja exibir o campo vinculado como texto no rótulo.
  • dados são o seu objeto com dados
  • "Nome" é o nome do campo que você deseja exibir
  • "AAA" é formato de exibição, aplicável caso você queira exibir valores com formatação personalizada

Basicamente, os bancos de dados no XTRAREPORT atuam praticamente da mesma maneira que os dados de dados padrão do Windows.

Deixe -me saber se você precisa de mais diretrizes

Aqui está uma alternativa ..

rtpObject.DataSourceSchema = dataSet.GetXmlSchema();

before doing this set modifier property as public

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);

// or //

XRBinding binding = new XRBinding("Text", dbaDataSet, "transactions.fk_transitems_transactionid.name2");
this.xrTableCell1.DataBindings.Add(binding);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top