BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki
User 83118
User 83118
56 pkt.
Poczatkujacy

 
0


Gdzie moge znaleźć informacje nt. drukowania raportow. Crystal Reports odpada.
Potrzebuje napisac wlasna metode. Mam formatke, w kilku textboxach
wyswietlaja sie dane, dwa datagridy podpiete relacja. Podpinam pod
przycisk funkcje i ladnie sformatowany raport leci na drukarke. (C#)






User 131096
User 131096
189 pkt.
Junior
 
0


Masz kilka możliwości ;). Moje podpowiedzi
1. XML + XSLT = XHTML -> [UlubionaPrzeglądarka] -> Druk2. Napisać własną metodę, jak sam wspomniałeś. Poniżej wklejam coś, co wygrzebałem "ze starych śmieci". To, co pozostało by Ci do napisania to "tylko" rysowanie datagrida, ale poniższy kod jest gotów na rozszerzenie go - napisałem tylko obsługę Label, PictureBox i Panel - też potrzebowałem czegoś do raportów. Sposób użycia - wywołać metodę Paint(Graphics g, Control c, bool clear) podając jako g - obiekt Graphics z wyjściem na papier, jako c - kontrolkę z layoutem do wydrukowania, jako clear - true, by początkowy obraz został wyczyszczony na biało. Uważaj na DPI przy projektowaniu kontrolki-szablonu.3. Za pomocą P/Invoke zrobić printscreena, przechwycić go ze schowka i wydrukować. Niestety jesteś wtedy ograniczony do tego, co widać na ekranie.
Osobiście uważam rozwiązanie nr 1 za najlepsze. Łatwo mógłbyś przystosować prezentację do danych, jakie masz. Z kolei renderowanie HTML może dawać "zbyt ciekawe" efekty na papierze.
W razie jakichś niejasności - pytaj.
Pozdrawiam
-----
using System;using System.Drawing;using System.Drawing.Drawing2D;using System.Collections;using System.Windows.Forms;
namespace UIHelpers{ public class ControlPainter {  public delegate void PaintMethod(Graphics g, Control c);
  private Color backColor = Color.White;  private Hashtable controlDelegates;
  public Color BackColor  {   get   {    return backColor;   }   set   {    backColor = value;   }  }
  public Hashtable ControlDelegates  {   get   {    return controlDelegates;   }  }
  public ControlPainter()  {
   controlDelegates = new Hashtable();   PopulateDelegates();  }
  public void Paint(Graphics g, Control c, bool clear)  {   if(clear)    g.Clear(backColor);
   foreach(Control sub in c.Controls)   {    Type t = sub.GetType();    if(controlDelegates.ContainsKey(t))     ((PaintMethod)controlDelegates[t])(g, sub);   }  }
  private void PopulateDelegates()  {   controlDelegates.Add(typeof(System.Windows.Forms.Label), new PaintMethod(PaintLabel));   controlDelegates.Add(typeof(System.Windows.Forms.PictureBox), new PaintMethod(PaintPictureBox));   controlDelegates.Add(typeof(System.Windows.Forms.Panel), new PaintMethod(PaintPanel));  }
  private void SetAlignment(StringFormat sf, ContentAlignment ca)  {   switch(ca)   {   case ContentAlignment.TopLeft:    sf.Alignment = StringAlignment.Near;    sf.LineAlignment = StringAlignment.Near;    break;   case ContentAlignment.TopCenter:    sf.Alignment = StringAlignment.Center;    sf.LineAlignment = StringAlignment.Near;    break;   case ContentAlignment.TopRight:    sf.Alignment = StringAlignment.Far;    sf.LineAlignment = StringAlignment.Near;    break;   case ContentAlignment.MiddleLeft:    sf.Alignment = StringAlignment.Near;    sf.LineAlignment = StringAlignment.Center;    break;   case ContentAlignment.MiddleCenter:    sf.Alignment = StringAlignment.Center;  

Udziel odpowiedzi

pkt.
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.