Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
121 views
in Technique[技术] by (71.8m points)

c# - System crashing when the print button is clicked

I have done like this for generating pdf at runtime when i click on the print button The process is like this when I click on the print button the pdf is generated with folder.

For that I have done like this:

private void btnPrint_Click(object sender, EventArgs e)
{

    private const string PAYMENT_PATH = @"c:xxxxxxxxxxpaymentType_{0}";

    btnPrint.Visible = true;
    btnPrint.Enabled = true;

    string pay = cbpaymenttype.Text;
    string dds = cbddprovider.Text;

    string path = String.Format(PAYMENT_PATH, DateTime.Now.ToString("ddMMyyyyHHmm"));

    //List<paymenttypeprint> paymenttype = new List<paymenttypeprint>();

    List<printfunctions> printfunction = new List<printfunctions>();
    foreach (ListViewItem item in lstviewcashmembers.Items)
    {

        printfunctions allpayments = new printfunctions();
        allpayments.member_Lastname = item.SubItems[1].Text;
        allpayments.member_Firstname = item.SubItems[2].Text;
        allpayments.Postcode = item.SubItems[3].Text;
        allpayments.ddReference = item.SubItems[4].Text;
        allpayments.ddprovider = item.SubItems[5].Text;
        allpayments.Monthlyamount = Convert.ToDecimal(item.SubItems[6].Text);
        allpayments.MembershipType = item.SubItems[7].Text;
        allpayments.Status = item.SubItems[8].Text;
        allpayments.Enddate = Convert.ToDateTime(item.SubItems[9].Text);
        allpayments.paymentmethods = item.SubItems[10].Text;
        printfunction.Add(allpayments);
    }

    new printFunction(printfunction, new Company(mf.gBaseUrl).GetSingleLineCompanyDetails(), path, pay, dds);

    System.Diagnostics.Process.Start("explorer.exe", path);
}

I have created the class printfunctions like this:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using PdfSharp;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Drawing.Layout;
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;
using MigraDoc.DocumentObjectModel.Shapes;
using MigraDoc.DocumentObjectModel.Tables;
using MigraDoc.DocumentObjectModel.Fields;
using System.IO;

namespace classes
{
    public class printfunctions
    {
        public string member_Lastname;
        public string member_Firstname;
        public string Postcode;
        public string ddReference;
        public string ddprovider;
        public decimal Monthlyamount;
        public string MembershipType;
        public string Status;
        public DateTime Enddate;
        public string paymentmethods;
    }

    public class printFunction
    {
        private Document _document;
        private Table _table;
        private List<printfunctions> _array;
        private string _address;
        private string _paymethod;
        private string _ddproviders;

        public printFunction(List<printfunctions> array, string address, string exportpath, string paymentmethod, string ddproviders)
        {
            _array = array;
            _address = address;
            _paymethod = paymentmethod;
            _ddproviders = ddproviders;

            Document ddreportdoc = CreateDocument();
            PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(true);

            pdfRenderer.Document = ddreportdoc;

            if (!Directory.Exists(exportpath))
                Directory.CreateDirectory(exportpath);

            pdfRenderer.RenderDocument();

            if (paymentmethod != "All")
            {
                pdfRenderer.Save(String.Format(@"{0}{1}  MEMBERS REPORT.pdf", exportpath, _paymethod));
            }
            else if (ddproviders != "")
            {
                pdfRenderer.Save(String.Format(@"{0}{1} MEMBERS REPORT.pdf", exportpath, _ddproviders));
            }
        }

        public Document CreateDocument()
        {

            _document = new Document();

            if (_ddproviders != "")
            {
                _document.Info.Title = string.Format("{0}", _ddproviders);
            }
            else if (_paymethod != "All")
            {

                _document.Info.Title = string.Format("{0}", _paymethod);
            }
            _document.Info.Author = "xxxxxxx";

            DefineStyles();
            CreatePage();
            FillContent();

            return _document;
        }

        private void DefineStyles()
        {
            Style style = _document.Styles["Normal"];
            style.Font.Name = "Verdana";

            style = _document.Styles[StyleNames.Header];
            style.ParagraphFormat.AddTabStop("8cm", TabAlignment.Right);

            style = _document.Styles[StyleNames.Footer];
            style.ParagraphFormat.AddTabStop("7cm", TabAlignment.Center);

            // Create a new style called Table based on style Normal
            style = _document.Styles.AddStyle("Table", "Normal");
            style.Font.Name = "Verdana";
            style.Font.Size = 6;

            // Create a new style called Reference based on style Normal
            style = _document.Styles.AddStyle("Reference", "Normal");
            style.ParagraphFormat.SpaceBefore = "6mm";
            style.ParagraphFormat.SpaceAfter = "6mm";
            style.ParagraphFormat.TabStops.AddTabStop("6cm", TabAlignment.Right);

        }

        private void CreatePage()
        {
            Section section = _document.AddSection();

            // Create footer
            Paragraph paragraph = section.Footers.Primary.AddParagraph();
            paragraph.AddText(_address);
            paragraph.Format.Font.Size = 8;
            paragraph.Format.Alignment = ParagraphAlignment.Center;

            paragraph = section.AddParagraph();
            paragraph.Format.SpaceBefore = "1.3cm";
            paragraph.Style = "Reference";
            if (_paymethod == "All")
            {
                paragraph.AddFormattedText(string.Format("{0} MEMBERS MONTHLY REPORT", _paymethod), TextFormat.Bold);
            }
            else if (_ddproviders == "All providers")
            {

                paragraph.AddFormattedText(string.Format("{0} MEMBERS MONTHLY REPORT", _ddproviders), TextFormat.Bold);
            }
            paragraph.AddTab();
            paragraph.AddDateField("dd MMM yyyy");

            _table = section.AddTable();
            _table.Style = "Table";
            _table.Borders.Color = new Color(0, 0, 0);

            //Defining the columns

            Column column = _table.AddColumn("1.7cm"); //Lastname
            column.Format.Alignment = ParagraphAlignment.Center;

            column = _table.AddColumn("1.7cm"); // first name
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); // postcode
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); // DD ref
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); //DD provider Name
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); // Monthly Amount
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); // mship type
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); // status
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); // Expiry date
            column.Format.Alignment = ParagraphAlignment.Left;

            column = _table.AddColumn("1.7cm"); // payment type
            column.Format.Alignment = ParagraphAlignment.Right;

            // Create the header of the _table
            Row row = _table.AddRow();
            row.HeadingFormat = row.Format.Font.Bold = true;
            row.Format.Alignment = ParagraphAlignment.Center;

            row.Cells[0].AddParagraph("Last Name");
            row.Cells[0].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[1].AddParagraph("First Name");
            row.Cells[1].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[2].AddParagraph("Post Code");
            row.Cells[2].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[3].AddParagraph("DD Reference");
            row.Cells[3].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[4].AddParagraph("DDProvider Name");
            row.Cells[4].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[5].AddParagraph("Monthly Amount");
            row.Cells[5].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[6].AddParagraph("Memebrship Type");
            row.Cells[6].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[7].AddParagraph("Status");
            row.Cells[7].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[8].AddParagraph("ExpiryDate");
            row.Cells[8].Format.Alignment = ParagraphAlignment.Left;

            row.Cells[9].AddParagraph("payment type");
            row.Cells[9].Format.Alignment = ParagraphAlignment.Left;
        }

        private void FillContent()
        {
            foreach (var item in _array)
            {
                // Each item fills two rows
                Row row1 = _table.AddRow();
                row1.TopPadding = 1.0;
                Paragraph paragraph;

                row1.Cells[0].VerticalAlignment = VerticalAlignment.Center;
                row1.Cells[0].Format.Alignment = ParagraphAlignment.Left;
                row1.Cells[0].AddParagraph(item.member_Lastname);

                row1.Cells[1].Format.Alignment = ParagraphAlignment.Right;
                paragraph = row1.Cells[1].AddParagraph(item.member_Firstname);

                row1.Cells[2].Format.Alignment = ParagraphAlignment.Left;
                paragraph = row1.Cells[2].AddParagraph(item.Postcode);

                row1.Cells[3].Format.Alignment = ParagraphAlignment.Right;
                paragraph = row1.Cells[3].AddParagraph(item.ddReference);

                row1.Cells[4].Format.Alignment = ParagraphAlignment.Left;
                paragraph = row1.Cells[4].AddParagraph(item.ddprovider);

                row1.Cells[5].Format.Alignment = ParagraphAlignment.Right;
                paragraph = row1.Cells[5].AddParagraph(item.Monthlyamount.ToString("F2"));

                row1.Cells[6].Format.Alignment = ParagraphAlignment.Left;
                paragraph = row1.Cells[6].AddParagraph(item.MembershipType);

                row1.Cells[7].Format.Alignment = ParagraphAlignment.Right;
                paragraph = row1.Cells[7].AddParagraph(item.Status);

                row1.Cells[8].Format.Alignment = ParagraphAlignment.Left;
                paragraph = row1.Cells[8].AddParagraph(item.Enddate.ToString("dd MMM yyyy"));

                row1.Cells[9].Format.Alignment = ParagraphAlignment.Right;
                paragraph = row1.Cells[9].AddParagraph(item.paymentmethods);
            }
        }
    }
}

Its working fine when the ListView lstviewcashmembers has rows upto 100 or 300, but its not working when the ListView lstviewcashmembers has 1600 rows.

The system crashes at this line:

pdfRenderer.RenderDocument();

The execution does not go to the next line and it does not showing any exception also the system just crashes when I click on the print button and if the ListView has 1600 rows.

Is there an


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Enable exceptions handling in VS like here and you will gotten exact exception description. Looking on your problem description sounds like this could be rows quantity limit. By the way check out the link.

Regards.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...