Запись в PDF удваивает ячейки после загрузки из XML с использованием Datagridview - PullRequest
0 голосов
/ 04 апреля 2019

Итак, я пишу приложение для выставления счета, которое сделано на 90%.Я заметил, что когда я экспортирую в PDF после загрузки и файла XML в мой Datagridview, он удваивает ячейки в документе PDF.Этого не произойдет, если я введу данные в DGV без сохранения и загрузки XML.Я не могу понять, почему он это делает, поскольку он не записывает больше в файл XML при сохранении и не записывает больше при загрузке.Это происходит только при экспорте в PDF.Возможно, я просто слишком долго смотрю на код.Любая помощь с благодарностью.Спасибо!Я опубликую код, который я использую для сохранения, загрузки и экспорта ...

Я очень старался установить количество столбцов в функциях загрузки, сохранения и экспорта, но все, что нужно, это увеличить количествоячейки без увеличения столбцов.

private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.TableName = "Inventory";

            SaveFileDialog sfd = new SaveFileDialog();
            sfd.DefaultExt = "xml";

            if (sfd.ShowDialog() == DialogResult.OK)
            {
                invoice_DG.AllowUserToAddRows = false;

                for (int i = 0; i < 6; i++)
                {
                    if (invoice_DG.Columns[i].Visible) // Add's only Visible columns (if you need it)
                    {
                        string headerText = invoice_DG.Columns[i].HeaderText;
                        //headerText = Regex.Replace(headerText, "[-/, ]", "_");

                        DataColumn column = new DataColumn(headerText);
                        dt.Columns.Add(column);
                    }
                }

                foreach (DataGridViewRow DataGVRow in invoice_DG.Rows)
                {
                    DataRow dataRow = dt.NewRow();
                    // Add's only the columns that you want
                    dataRow["QTY"] = DataGVRow.Cells["QTY"].Value;
                    dataRow["ITEM"] = DataGVRow.Cells["ITEM"].Value;
                    dataRow["COST"] = DataGVRow.Cells["COST"].Value;
                    dataRow["RETAIL"] = DataGVRow.Cells["RETAIL"].Value;

                    dt.Rows.Add(dataRow); //dt.Columns.Add();
                }
                DataSet ds = new DataSet();
                ds.Tables.Add(dt);

                //Finally the save part:
                XmlTextWriter xmlSave = new XmlTextWriter(sfd.FileName, Encoding.UTF8);
                xmlSave.Formatting = Formatting.Indented;
                ds.DataSetName = "Data";
                ds.WriteXml(xmlSave);
                xmlSave.Close();
            }

            if(invoice_DG.AllowUserToAddRows == false)
            {
                invoice_DG.AllowUserToAddRows = true;
            }
        }

private void exportToPDFToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string par_text = "";
            SaveFileDialog save_Dialog = new SaveFileDialog();
            save_Dialog.DefaultExt = "pdf";

            if (save_Dialog.ShowDialog() == DialogResult.OK)
            {
                Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);

                if (File.Exists(save_Dialog.FileName))
                {
                    PdfWriter wr = PdfWriter.GetInstance(doc, new FileStream(save_Dialog.FileName, FileMode.Append));
                }

                else
                {
                    PdfWriter wr = PdfWriter.GetInstance(doc, new FileStream(save_Dialog.FileName, FileMode.CreateNew));
                }

                doc.Open(); // Open Document to write

                BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.EMBEDDED);
                PdfPTable table = new PdfPTable(invoice_DG.Columns.Count);
                table.DefaultCell.Padding = 3;
                table.WidthPercentage = 100;
                table.HorizontalAlignment = Element.ALIGN_CENTER;
                table.DefaultCell.BorderWidth = 1;

                iTextSharp.text.Font d_Text = new iTextSharp.text.Font(bf, 10, iTextSharp.text.Font.NORMAL);

                //Add Headertext
                foreach (DataGridViewColumn column in invoice_DG.Columns)
                {
                    PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, d_Text));
                    cell.BackgroundColor = new iTextSharp.text.BaseColor(240, 240, 240);
                    table.AddCell(cell);
                }

                //Add Row Data
                foreach (DataGridViewRow row in invoice_DG.Rows)
                {
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        if (cell.Value != null)
                        {
                            Console.WriteLine("Adding cell: " + cell.Value.ToString());
                            table.AddCell(new Phrase(cell.Value.ToString(), d_Text));
                        }
                    }
                }

                par_text = invoice_TB.Text + "\n\n" + title_LB.Text + "\n\n";
                Paragraph par = new Paragraph(par_text);
                par.Alignment = Element.ALIGN_CENTER;
                doc.Add(par);
                doc.Add(table);
                par_text = "\n\n" + this.oc_LB.Text + this.o_Cost.Text + "\n\n" + this.or_LB.Text + this.o_Retail.Text;                
                par.Alignment = Element.ALIGN_RIGHT;
                par = new Paragraph(par_text);
                doc.Add(par);
                par.Alignment = Element.ALIGN_LEFT;
                par_text = paid_BN.Text;
                par = new Paragraph(par_text);
                doc.Add(par);                
                doc.Close();
            }
        }

//********LOADING FROM XML to DATAGRIDVIEW (invoice_DG)**************
        private void loadToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    invoice_DG.AllowUserToAddRows = false;
                    DataSet ds = new DataSet();
                    ds.ReadXml(ofd.FileName);
                    invoice_DG.DataSource = ds.Tables["Inventory"];

                    for(int i = 0; i < ds.Tables["Inventory"].Columns.Count; i++)
                    {
                        if (ds.Tables["Inventory"].Rows[i][0].ToString() != null || ds.Tables["Inventory"].Rows[i][0].ToString() != "")
                        {
                            invoice_DG.Rows[i].Cells[0].Value = ds.Tables["Inventory"].Rows[i][0].ToString();
                            invoice_DG.Rows[i].Cells[1].Value = ds.Tables["Inventory"].Rows[i][1].ToString();
                            invoice_DG.Rows[i].Cells[2].Value = ds.Tables["Inventory"].Rows[i][2].ToString();
                            invoice_DG.Rows[i].Cells[3].Value = ds.Tables["Inventory"].Rows[i][3].ToString();                            
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("********************\n" + ex.ToString() + "\n********************");
                }

                if (invoice_DG.AllowUserToAddRows == false)
                {
                    invoice_DG.AllowUserToAddRows = true;
                }
            }

            total_CostandRetail();
        }
...