none
Imprimir e Visualizar dados SQL usando System.Drawing.Printing RRS feed

  • Pergunta

  • Bom dia a todos, estou com uma dificuldade, achei alguns códigos neste e em outros fóruns no qual poderiam me ajudar, porém estavam em VB e eu nao entendo nada. Utilizando Windows Form eu preciso ao clicar em um button1 mandar imprimir os dados de uma tabela sql minha, e ao clicar em um button2 apenas visualizar os dados dessa tabela, utilizando o System.Drawing.Printing. Eu tenho os códigos dos meus button, porém preciso fazer funcionar o meu 'método' Imprimir(object sender, PrintPageEventArgs ev). Caso vocês possam me passar alguma informação, dica, artigos ou códigos, ficarei satisfeito ! Obrigado desde já.

    Código dos meus buttons:

    private void cmdImprimir_Click(object sender, EventArgs e)
            {
                try
                {
                    PrintDocument pd = new PrintDocument();
                    pd.DocumentName = "Dados do Banco";
                    pd.PrintPage += Imprimir;
                    pd.Print();
                    lblStatus.Text = "Dados enviado para impressora";
                }
                catch (Exception x)
                {
                    lblStatus.Text = x.Message;
                }
            }
    private void cmdVisualizar_Click(object sender, EventArgs e)
            {
                try
                {
                    PrintDocument pd = new PrintDocument();
                    pd.DocumentName = "Visualização dos dados";
                    pd.PrintPage += Imprimir;
                    PrintPreviewDialog ppd = new PrintPreviewDialog();
                    ppd.Document = pd;
                    ppd.ShowDialog();
                    lblStatus.Text = "Dados enviado para a tela";
                }
                catch (Exception x)
                {
                    lblStatus.Text = x.Message;
                }
            }
    

    Código incompleto do meu método (tem muita coisa misturada, estou tentando ver a maneira correta, fui juntando uns códigos que eu achei na net e estou tentando formular ele para que de certo):

    private void Imprimir(object sender, PrintPageEventArgs ev)
            {
                string sql = "";
                sql += " Select IdCliente, Nome from Clientes ";
                Conectar();
                SqlCommand cd = new SqlCommand(sql, cx);
                cd.ExecuteNonQuery();
    
                //  Linha a ser impressa.
                //string linha = "Nome   Endereço    Cidade";
                // Fonte para a impressão.
                Font f = new Font("Courier New", 14);
                //  Calcula o nmero de linhas por pgina.
                int linhasPorPagina = (int)(ev.MarginBounds.Height / f.GetHeight(ev.Graphics));
                //  Clacula a altura da fonte
                int alturaFonte = (int)f.GetHeight(ev.Graphics);
                //  Varivel para armazenamento de posio vertical.
                int posY = 0;
                for (int i = 1; (i <= linhasPorPagina); i++)
                {
                    //  Desenha a linha.
                    ev.Graphics.DrawString((i.ToString("00") + (": " + linha)), f, Brushes.Black, 10, posY, new StringFormat());
                    //  Inrementa posio vertical.
                    posY = (i * alturaFonte);
                }
            }
    
                //Antes da impressão você ajusta as propriedades do PrintDocument, como tamanho do papel, margens, etc. Exemplo:
    
                //// Tamnho do papel
                //printDocument1.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("PapelCustomizado", 394, 394);
                //// Ajusta a margem. Sem margens, no exemplo.
                //printDocument1.DefaultPageSettings.Margins.Left = 0;
                //printDocument1.DefaultPageSettings.Margins.Right = 0;
                //printDocument1.DefaultPageSettings.Margins.Top = 0;
                //printDocument1.DefaultPageSettings.Margins.Bottom = 0;
                //// Número de cópias
                //printDocument1.PrinterSettings.Copies = 1;
                //// Faz o preview do documento.
                //printPreviewDialog1.Document = printDocument1;
                //printPreviewDialog1.ShowDialog();
    
    
    
    
                //string sql = "";
                //sql += " Select IdCliente, Nome from Clientes ";
                //Conectar();
                ////SqlCommand cd = new SqlCommand(sql, cx);
                //DataTable dt = new DataTable();
    
                //SqlDataAdapter da = new SqlDataAdapter(sql, cx);
                //da.Fill(dt);
    
                //StreamReader ler = new StreamReader(sql);
    
    
    
                ////Configurações da página
                //float linhasPorPagina = 0;
                //float posicaoVertical = 0;
                //float contador = 0;
                //float margemEsquerda = 0;
                //float margemSuperior = 0;
                //float alturaFonte = 0;
                //string linha = "";
    
                //Font fonte = new Font("Arial", 10);
                //ev.Graphics.DrawString(linha, fonte, Brushes.Black, margemEsquerda, posicaoVertical);
    
                //alturaFonte = fonte.GetHeight(ev.Graphics);
                //linhasPorPagina = ev.MarginBounds.Height / alturaFonte;
    
    
                //while ((contador < linhasPorPagina) && (linha != null))
                //{
                //    linha = ler.ReadLine();
                //    posicaoVertical = margemSuperior + contador * alturaFonte;
                //    ev.Graphics.DrawString(linha, fonte, Brushes.Black, margemEsquerda, posicaoVertical);
                //    contador++;

    É isso ai, espero que vocês possam me ajudar.

    Valeu !!


    Atenciosamente, Guilherme. Caso esta resposta foi útil, por favor, marque como mesma.

    quarta-feira, 21 de março de 2012 14:50

Respostas

  • Bom, consegui resolver este problema, segue abaixo o código do meu método que faz a conexão com o banco e todo o processo. OBS: Código dos buttons estão OK já na pergunta.

    private void Imprimir(object sender, PrintPageEventArgs ev)
            {
                float linhasPorPagina = 0;
                float posicaoVertical = 0;
                float contador = 0;
                float margemEsquerda = 5;
                float margemSuperior = 5;
                float alturaFonte = 0;
    
                alturaFonte = fonte.GetHeight(ev.Graphics);
                linhasPorPagina = ev.MarginBounds.Height / alturaFonte;
    
    
                string sql = "";
                sql += " Select IdCliente, Nome from Clientes ";
                Conectar();
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(sql, cx);
                da.Fill(dt);
    
                //Varre cada registro do Datatable
                foreach (DataRow dtrow in dt.Rows)
                {
                    int IdUnidade = Convert.ToInt32(dtrow["IdCliente"]);
                    string NomeUnidade = dtrow["Nome"].ToString();
                    string linha = IdUnidade + " - " + NomeUnidade;
    
                    posicaoVertical = margemSuperior + contador * alturaFonte;
                    ev.Graphics.DrawString(linha, fonte, Brushes.Black, margemEsquerda, posicaoVertical);
                    contador++;                              
                }
                Desconectar();
            }


    Atenciosamente, Guilherme. Caso esta resposta foi útil, por favor, marque como mesma.

    • Marcado como Resposta Seratti quarta-feira, 21 de março de 2012 18:09
    quarta-feira, 21 de março de 2012 18:09