我有一个datagridview,我需要导出选定的行和列使用itextsharp pdf。我可以导出整个datagridview,也只能选择行。导出选定的行和列datagridview
问题1.行以相反的顺序导出,而不是我如何检查它们。 (例如,I检查行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();
}