Преобразование из DataGridView в DataTable - PullRequest
0 голосов
/ 10 июня 2019

эти две функции заботятся о преобразовании таблицы данных в таблицу данных с использованием c #, когда выполняется преобразование, файл печатается в pdf, но название столбцов выбивается после печати в pdf, как можно Я решаю это? Я должен сделать так, чтобы имя столбца появилось

C # Код:

private DataTable GetDataTableFromDGV(DataGridView dgv)
        {
            var dt = new DataTable();
            foreach (DataGridViewColumn column in dgv.Columns)
            {
                if (column.Visible)
                {
                    dt.Columns.Add();
                }
            }

            object[] cellValues = new object[dgv.Columns.Count];
            foreach (DataGridViewRow row in dgv.Rows)
            {
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    cellValues[i] = row.Cells[i].Value;
                }
                dt.Rows.Add(cellValues);
            }

            return dt;
        }

        public void createPDF(DataTable dataTable, string destinationPath)
        {
            Document document = new Document();
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationPath, FileMode.Create));
            document.Open();

            PdfPTable table = new PdfPTable(dataTable.Columns.Count);
            table.WidthPercentage = 100;

            //Set columns names in the pdf file
            for (int k = 0; k < dataTable.Columns.Count; k++)
            {
                PdfPCell cell = new PdfPCell(new Phrase(dataTable.Columns[k].ColumnName));

                cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
                cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;
                cell.BackgroundColor = new iTextSharp.text.BaseColor(51, 102, 102);

                table.AddCell(cell);
            }

            //Add values of DataTable in pdf file
            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                for (int j = 0; j < dataTable.Columns.Count; j++)
                {
                    PdfPCell cell = new PdfPCell(new Phrase(dataTable.Rows[i][j].ToString()));
                    cell.HorizontalAlignment = PdfPCell.ALIGN_CENTER;
                    cell.VerticalAlignment = PdfPCell.ALIGN_CENTER;
                    table.AddCell(cell);
                }
            }

            document.Add(table);
            document.Close();
        }

1 Ответ

1 голос
/ 10 июня 2019

Попробуйте добавить это в цикл foreach, который добавляет столбцы:

dt.Columns.Add (column.Name, typeof (string));

Или альтернативно:

dt.Columns.Add (column.HeaderText, typeof (string));

Так бы это выглядело так:

 foreach (DataGridViewColumn column in dgv.Columns)
 {
       if (column.Visible)
       {
           dt.Columns.Add(column.Name, typeof(string));
       }
 }

Я не тестировал этот код, но вы должны явно добавить имена в столбцы, скажите, работает ли он ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...