c# - 导出选定的行和列 datagridview

标签 c# mysql datagridview

我有一个 datagridview,我需要使用 itextsharp 仅将选定的行和列导出为 pdf。我可以导出整个 datagridview,也可以仅导出选定的行。

问题 1. 行以相反的顺序导出,而不是我检查它们的顺序。 (例如,我检查行 ID 1, 5, 8,在 pdf 中它是 8, 5, 1)

我不想更改SelectionMode,因为现在我使用FullRowSelect将值加载到文本框并导出选定的行。我在这里找到了可能的答案:Get selected Row/Columns Count without Setting Selection Mode但我无法使用它..

问题 2。我需要用户选择要导出的行和列。

这是我导出 dgv 的代码:

private void exportDgvPDF(DataGridView dgvLoadAll, string filename)
   {
        BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.EMBEDDED);

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

        Document doc = new Document(PageSize.A2.Rotate(), 1, 1, 1, 1);
        PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));
        doc.Open();

        // I need to remove 21 columns since I have lots invisible "useless" columns .. will work on that later
        PdfPTable pdftable = new PdfPTable(dgvLoadAll.ColumnCount - 21);

        for (int j = 0; j < dgvLoadAll.Columns.Count - 21; j++)
        {
            PdfPCell cell = new PdfPCell(new Phrase(dgvLoadAll.Columns[j].HeaderText, text));
            cell.BackgroundColor = BaseColor.LIGHT_GRAY;
            pdftable.AddCell(cell);
        }

        pdftable.HeaderRows = 0;
        for (int i = 0; i < dgvLoadAll.SelectedRows.Count; i++)
        //for (int i = 0; i < dgvLoadAll.Rows.Count; i++)
        {
            for (int k = 0; k < dgvLoadAll.Columns.Count - 21; k++)
            {

                if (dgvLoadAll[k, i].Value != null)
                {
                    pdftable.AddCell(new Phrase(dgvLoadAll.SelectedRows[i].Cells[k].Value.ToString(), text));
                    //pdftable.AddCell(new Phrase(dgvLoadAll[k, i].Value.ToString(), text));

                }
            }
        }

        //float[] widths = new float[] { 15f, 50f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f, 40f };

       // pdftable.SetWidths(widths);
        doc.Add(pdftable);
        doc.Close(); 
    }

最佳答案

private void exportDgvPDF(DataGridView dgvLoadAll, string filename)
{

        BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.EMBEDDED);

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

        Document doc = new Document(PageSize.A2.Rotate(), 1, 1, 1, 1);
        PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));
        doc.Open();

        // I need to remove 21 columns since I have lots invisible "useless" columns .. will work on that later
        PdfPTable pdftable = new PdfPTable(dgvLoadAll.ColumnCount - 21);

        for (int j = 0; j < dgvLoadAll.Columns.Count - 21; j++)
        {
            PdfPCell cell = new PdfPCell(new Phrase(dgvLoadAll.Columns[j].HeaderText, text));
            cell.BackgroundColor = BaseColor.LIGHT_GRAY;
            pdftable.AddCell(cell);
        }


        pdftable.HeaderRows = 0;

    // i add foreach i hope this will help you 
        foreach (DataGridViewRow row in dataGridView1.SelectedRows)
        {
            for (int k = 0; k < dataGridView1.Columns.Count - 21; k++)
            {
                if (dgvLoadAll[k, i].Value != null)
                {
                 pdftable.AddCell(new Phrase(row.Cells[k].Value.ToString(), text));
                }
            }

        }


        doc.Add(pdftable);
        doc.Close(); 


        }

关于c# - 导出选定的行和列 datagridview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745117/

相关文章:

c# - 设置继承以避免 future 代码冗余的最佳方法是什么?

c# - 如何在用户对 gridview 中的列进行排序后保持格式

c# - 如何获取实现接口(interface)的类列表?

mysql - 如何处理 INSERT 但拒绝更新 MySQL 中的某些列?

mysql - MySQL shell 中的回滚在 ALTER TABLE 后不起作用

php - sql + php 连接和爆炸

vb.net - 重载DataGridViewCellStyle并给出默认值

c# - 如何创建一个 Button,它可以在不窃取焦点的情况下将键发送到控件 - Virtual Keyboard

c# - 在模式对话框关闭时更新父页面?

c# - 我可以将 NUnit 3 测试添加到 Visual Studio 2015 负载测试吗?