DataGridview가 있고 itextsharp를 사용하여 pdf에 선택된 행과 열만 내보내야합니다. 전체 datagridview 및 선택한 행만 내보낼 수 있습니다.선택한 행 및 열 내보내기 datagridview
문제 1. 행을 역순으로 내보내고 체크 한 방법은 아닙니다. (예 : I 행을 확인 ID 1, 5, 8, PDF에서 8, 5, 1) 지금은 텍스트 상자에 값을로드 할 수 FullRowSelect을 사용하기 때문에
내가 의 selectionMode을 변경하지 않으 선택한 행을 내보낼 수 있습니다. 가능한 답을 찾았습니다 : Get selected Row/Columns Count without Setting Selection Mode하지만 사용할 수 없습니다 ..
문제점 2. 내보낼 열과 행을 선택해야합니다.
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();
}