簡體   English   中英

導出選定的行和列datagridview

[英]Export selected rows AND columns datagridview

我有一個datagridview,我只需要使用itextsharp將選定的行和列導出到pdf。 我能夠導出整個datagridview,也只能導出選定的行。

問題1.行以相反的順序導出,而不是我如何檢查它們。 (例如,我檢查ID為1、5、8的行,而在pdf中為8、5、1)

我不想更改SelectionMode ,因為現在我使用FullRowSelect將值加載到文本框並導出選定的行。 我在這里找到了可能的答案:在不設置選擇模式的情況下獲取選定的行數/列數,但是我無法使用它。

問題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(); 


        }

我想到了。 這是我使用itextsharp將選定的行和列導出為pdf的完整解決方案。

要選擇要導出的列,我使用ColumnHeaderMouseClick事件。 您需要使列不可排序。 我將選定的列索引添加到列表columnList。 如果已經有此索引,則不會添加它。

         private void dgvLoadAll_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {

        DataGridViewColumn dataGridViewColumn = dgvLoadAll.Columns[e.ColumnIndex];

        if (columnsList.Contains(e.ColumnIndex))
        {
            columnsList.Remove(e.ColumnIndex);
            dataGridViewColumn.HeaderCell.Style.BackColor = SystemColors.Control;
        }
        else
        {  
            columnsList.Add(e.ColumnIndex);
            dataGridViewColumn.HeaderCell.Style.BackColor = SystemColors.Highlight;
        }
    }

類似,我創建一個列表行選擇。

        foreach (DataGridViewRow r in dgvLoadAll.SelectedRows)
        {
            rowsselected.Add(r.Index);
        }

然后,主要導出功能為:

            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();

            // sort selected columns and rows indexes in order to be exported how they are viewed in datagridview
            columnsList.Sort();
            rowsselected.Sort();

            PdfPTable pdftable = new PdfPTable(columnsList.Count);
            foreach (int columnindex in columnsList)
            {
                PdfPCell cell = new PdfPCell(new Phrase(dgvLoadAll.Columns[columnindex].HeaderText, text));
                cell.BackgroundColor = BaseColor.LIGHT_GRAY;
                pdftable.AddCell(cell);
            }

            pdftable.HeaderRows = 0;

            foreach (int rowindex in rowsselected)
            {
                foreach (int columnindex in columnsList)
                {
                    if (dgvLoadAll[columnindex, rowindex].Value != null)
                    {
                        pdftable.AddCell(new Phrase(dgvLoadAll.Rows[rowindex].Cells[columnindex].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();
            rowsselected.Clear();

您可以更改選擇列的方式,例如,如果需要對datagridview列進行自動排序,請選中一些復選框。 解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM