Criar relatório RDLC dinamicamente em tempo de execução a partir de um DataGridView
Eu tenho um formulárioAdvancedSearchForm
com umDataGridView ao controledgrData
e um botãoReport
em C # Winform. Ao clicar no botãoReport
, Desejo que um formulário com umReportView O controle seja mostrado com as mesmas colunas que no DataGridView com a mesma coluna Headers.
Formulário com DataGridView e Button
Saída esperada ao clicar no botão "Relatório":
MinhasDatagridView (dgrData
) O controle está associado a
“Select Id, c_Name from Country”
ConnectionStringserver=localhost;User Id=root;password=root;Persist Security Info=True;database=country_state
Para carregar dados na grade em tempo de execução, eu preparo o seguinteDataAdapter:
DataAdapter dataAdapter = DataAdapter.Current;
// I am passing the SQL statement and the table name to my database which knows the ConnectionString within the LoadData function
DataTable dt0 = dataAdapter.LoadData("select Id, c_Name from `country`", "country");
if (dt0 != null) {
dgrData.DataSource = dt0;
}
É possível chamar um formulário filho contendo o padrãoreportviewer controle, que mostra o relatório com uma tabela contendo colunas correspondentes ao datagridview (dgrData
) junto com dados dinamicamente em tempo de execução?
Expectativa de saída em detalhes:
Ao clicar no botão, o visualizador de relatórios no formulário de destino deve receberassociado ao dataSource a partir dos valores noDataGridView. Então oReportViewer O controle não sabe nada sobre os dados no relatório até o usuário clicar no botão Relatório no tempo de execução.Desejo que a solução não exija a criação de um arquivo RDLC separado, porque causa dependência externa, para interromper o fluxo atual e criar um arquivo de relatório em um designer de arquivo de relatório que possa estar sobrecarregando os usuários.Não sei nada sobre o designer de RDLC e a fonte de dados associada (estou disposto a aprender (^ _ ^), mas não posso forçar esse requisito de aprendizado em minha equipe) e vincular os dados ao relatório. Eu apreciaria trabalhar exemplos de codificação, se sua ajuda contiver teoria.Eu sei que o ReportViewer existe há bastante tempo. Gostaria que fosse mais fácil encontrar uma solução de exemplo para o mapeamento de dados 1-1 entre a grade de dados e o ReportViewer para alguém no futuro no SO.
Nota: Informe-me se houver algum dado adicional do meu lado nos comentários. Para mostrar a solução atual, tive que criar um arquivo RDLC em que tive que colocar a string de conexão e o SQL no tempo de design, o que desejo evitar na solução que estou procurando. Desejo encontrar uma solução em que o arquivo RDLC seja gerado por meio de algum código modular que também possa ser usado em outras soluções, em vez de ter que projetá-lo para cada formulário em que possuo DataGrids.