Prog.Hu

ReportViewer nyomtatás
50

2013-12-22T23:24+01:00
pozo
pozoProg.Hu
regisztrált tag
Sziasztok,

ReportViewerben készítettem egy bizonylatot, amely egy oldalas. Ez adatbázisból dolgozik, amelyik bizonylatot kijelölöm, az nyomtatódik ki. Hogyan lehet azt megcsinálni, hogy egyszerre több kijelöléssel, különálló lapokon jelenjen meg a bizonylat. Próbálkoztam már renderrel, subreporttal, eddig nem sikerült. A lényeg, hogy pl. 10 különböző kijelölt bizonylatot egy reportban és 10 lapon jelenítsen meg a program, és csak egyszer kelljen a nyomtatót kiválasztani. Köszönöm előre is a választ.

Pozo
Mutasd a teljes hozzászólást!
ReportViewer nyomtatás
2013-12-22T23:24+01:00
pozo
pozoProg.Hu
regisztrált tag
Bocsi, de a reportviewer inputja nem a tábla, hanem maga a report.
Egyébként report-ot nyomtathatsz reportviewer nélkül is.
Ha rákeresel a tudástárban a demoszamla-ra, kaphatsz ötleteket.
Mutasd a teljes hozzászólást!

Bocsi, de a 10 az mindig 10 vagy lehet 8 vagy 12 is?
Mutasd a teljes hozzászólást!
Az a problémám, hogy 10x renderel a program, és 10x1 lapra jön le, nem 1x10-re. Tehát valahogy össze kéne fűzni a 10 lapot. Ha kell ciklusba is beleteszem.
Mutasd a teljes hozzászólást!
Bocsi, de tán félreérthető volt a kérdésem, azért nem válaszoltál rá?
Mindig 10 bizonylatot kívánsz egy report-ban nyomtatni?
Mutasd a teljes hozzászólást!
Nem, hanem amennyi ki van választva. datatable-ba teszem a kiválasztott bizonylat adatait. Most ott tartok, hogy ciklussal próbálozok, de arra hivatkozik, hogy nem tudja appendelni a file-t, mert másik process használja, pedig a Filestream változót zárom.
Mutasd a teljes hozzászólást!
Úgy néz ki sikerült megoldanom :)
Mutasd a teljes hozzászólást!
Úgy néz ki sikerült megoldanom

Remek.
Le is írnád, miként ?
Mutasd a teljes hozzászólást!
Úgy néz ki sikerült. :) Új .emf file-okba kell tennem minden oldalt a rendeléskor és van a gyűjtő stream (streamList), amelyben már egybe van az egész renderelve. Annyi, hogy lesz egy temp könyvtár, amelyben sok ilyen különálló .EMF file lesz.
Mutasd a teljes hozzászólást!
A sok .EMF file-t lett volna jó elkerülni még, de így is jó.
Mutasd a teljes hozzászólást!
Csak ez lénne még a kérdés, hogy a programozott renderelést hogyan lehet a reportviewerrel megjeleníteni és onnan nyomtatni.
Az m_streams változó, az amiben van a nyomtatni való.

private void Print()
{
string printerName = PrinterName;
if (m_streams == null || m_streams.Count == 0)
return;
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
if (!printDoc.PrinterSettings.IsValid)
{
string msg = string.Format(
"Can't find printer "{0}".", printerName);
MessageBox.Show(msg, "Print Error");
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
//kell printDoc.Print();
}


private void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new
Metafile(m_streams[m_currentPageIndex]);
ev.Graphics.DrawImage(pageImage, 0, 0, 820, 1137);
m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
Mutasd a teljes hozzászólást!
Bocsi, de érdemes használni..

Egyébként csak kérdezném, hogy
- mi a hasznod a válogatás egyidejű, egy report-ban történő nyomtatásából?
- miért kell egyáltalán megjeleníteni a reportviewer-ben egyenként a bizonylatokat?
Mutasd a teljes hozzászólást!
Csatolt állomány
1.
minden bizonylatot ki kell nyomtatni pl. hó végi elszámolásnál, amely listája lehet több száz is, de lehet válogatni is pipálással. Ezt reportviewerben csak egymásutáni feldobálással tudtam megoldani. Az lett volna a legjobb, ha reportviewert is egyszer feldobva jelenik meg benne a 100 bizonylat. De megoldottam: választható, hogy nyomtatási képpel (ez a reportviewer), vagy anélkül akarunk-e nyomtatni. Letöltöttem egy PDF printert, és a nyomtatási kép nélküli nyomtatásnál is felhozza a nyomtatók listáját, ebből kiválasztva a PDF printert, máris egy PDF-ben megjelenő nyomtatási képet kapunk. :). Itt az utóbbinál nem jelenik meg a reportviewerben természetesen, de a PDF megnyílik és így is nyomtatási képet kapunk, amit nyomtathatunk.

A bizonylat elég komplex, tartalmaz textboxokat, táblákat (kettőt is: törzs, tétel. A törzsben egy adatsor, a tételben több adatsor található egy-egy bizonylathoz.)
Mutasd a teljes hozzászólást!
Az lett volna a legjobb, ha reportviewert is egyszer feldobva jelenik meg benne a 100 bizonylat.

Bocsi, de minek?
Hiszen már láttad azokat, mikor kiválogattad, miért kéne ismét mustrálgatni?
A válogatást elmentheted egy listába, majd azon kocogva mehet a 100 bizonylat nyomtatása.
Szvsz picit túl nagy feneket kerítettél a témád megoldásának.
Mutasd a teljes hozzászólást!
Ezt is csinálom. Elmentem adattáblákba, amelyekből a nyomtatás dolgozik (reportviewer.datasource.add...), de egyszerre csak egy bizonylatot, mert ha listába tenném, akkor a bizonylat elég érdekes lenne. A textboxok a First rekordot jelenítik meg és sok van belőle. Az adattáblák pedig a teljes listát. Ezen is gondolkodtam már, hogyan lehetne laptöréseket csinálni, vagy filterezni.
Mutasd a teljes hozzászólást!
mert ha listába tenném, akkor a bizonylat elég érdekes lenne.

Látom félreértettél.
Nem a bizonylatot csak a válogatást (pl. bizonylat azonosítót) teszed a listába.
Nem kell laptörés, filterezés.
Ciklusban nyomtatsz, amig van a listában azonositó addig mehet a print-elés.

Mutasd a teljes hozzászólást!
Úgy oldottam meg, hogy mindig egy bizonylatot tettem adattáblába, azt elküldtem nyomtatásra, ekkor megnyílt a reportviewer egy bizonylattal. Ezt bezárva megismétlődött az előző folyamat, amíg a ciklus tartott. Ha például két bizonylatot tennék bele az adattáblába (az az adattábla, amely a reportviewert kiszolgálja), akkor is egy oldalon jelenne meg a bizonylat, csak kétszer annyi adattal a reportviewer táblában, a textboxokban pedig a first változónak megfelelően csak az egyik bizonylat adata jelenne meg.
Mutasd a teljes hozzászólást!
Bocsi, de a reportviewer inputja nem a tábla, hanem maga a report.
Egyébként report-ot nyomtathatsz reportviewer nélkül is.
Ha rákeresel a tudástárban a demoszamla-ra, kaphatsz ötleteket.
Mutasd a teljes hozzászólást!