schimanscky Posted July 21, 2016 at 03:32 PM Report #597757 Posted July 21, 2016 at 03:32 PM Boa tarde Pessoal. Eu estou a desenvolver um software de vendas e gestão de estoque em C#. Já implementei quase tudo, mas estou a encontrar dificuldades em implementar a função de impressão. Gostaria que alguém me ajudasse em como posso pegar dados de um DataGridView e passar para um relatório e posteriormente efectuar a impressão. Obrigado.
Júnior Pacheco Posted July 26, 2016 at 01:58 PM Report #597806 Posted July 26, 2016 at 01:58 PM Olá, No clique da linha ou botão de "Gerar Relatório" da sua GridView você capturar o ID do linha clicada e realiza uma consulta no banco de dados trazendo todas as informações que preciso para utilizar no relatório. Creio que pegar os dados da Grid não seria muito seguro, pois os dados podem ter sidos atualizados anteriormente! Entende?
N3lson Posted July 27, 2016 at 07:33 AM Report #597818 Posted July 27, 2016 at 07:33 AM (edited) Faz o seguinte (como eu costumo fazer) Crias um window form e nesse window form coloca um reportviewer (reportviewer1) - Nesse ReportViewer associa a um Dataset (Dataset) que irás personalizar - Desenhas o teu rdlc e colocas os campos da tabela que pretendes imprimir e em seguida personalizas o teu Dataset ============================= CS Code Do windowsForm que contem o ReportViewer =============== public partial class FormReportOrdem : Form { MySqlDataAdapter da; public FormReportOrdem(int id) { InitializeComponent(); this.textMaquina.ReadOnly = true; this.textMaquina.Text = id.ToString(); this.lblData.Text = DateTime.Now.ToString("dd/MM/yyyy"); var setup = this.reportViewer1.GetPageSettings(); setup.Margins = new System.Drawing.Printing.Margins(4, 4, 4, 4); this.reportViewer1.SetPageSettings(setup); this.reportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout); } // Loading do report private void FormReportOrdem_Load(object sender, EventArgs e) { string query = " SELECT * FROM " + Controle.ord_trabalho + " " + " INNER JOIN " + Controle.maquina + " " + " ON ord_trabalho.maquina = maquina.maquina " + " INNER JOIN " + Controle.tecnicos + " ON ord_trabalho.operador = tecnicos.tecnico " + " WHERE ord_trabalho.id = @id"; using (MySqlConnection con = new MySqlConnection(Controle.ConSql)) { using (MySqlCommand cmd = new MySqlCommand(query, con)) { con.Open(); cmd.Prepare(); cmd.Parameters.AddWithValue("@id", this.textMaquina.Text); da = new MySqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); reportViewer1.LocalReport.DataSources.Clear(); reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DataSet", ds.Tables[0])); this.reportViewer1.RefreshReport(); } con.Close(); } } // Actualizar base dados, colocar o estado da impressão p/ impresso, e refresh datagrid. private void FormReportOrdem_FormClosing(object sender, FormClosingEventArgs e) { string query = "UPDATE " + Controle.ord_trabalho + " SET print = 2 WHERE id=@id" ; using (MySqlConnection con = new MySqlConnection(Controle.ConSql)) { using (MySqlCommand cmd = new MySqlCommand(query, con)) { con.Open(); cmd.Prepare(); cmd.Parameters.AddWithValue("@id", this.textMaquina.Text); int printed = cmd.ExecuteNonQuery(); if (printed > 0) { Controle.controlarUpdate = 1; } } con.Close(); } this.reportViewer1.LocalReport.ReleaseSandboxAppDomain(); } } Depois relativamente á impressão é tudo controlado pelos comandos do report Edited August 7, 2016 at 08:56 AM by apocsantos You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now