从 DataGridView 到 DataTable 的转换



这两个函数负责使用 C# 将 DataGridView 转换为数据表,当执行转换时,文件打印在 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();
        }

尝试在添加列的 foreach 循环中添加以下内容:

DT.Columns.Add(column.名称,类型(字符串((;

或者:

DT.Columns.Add(column.HeaderText, typeof(string((;

所以它看起来像这样:

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

我还没有测试过这段代码,但你必须明确地将名称添加到列中,告诉我它是否有效......

最新更新