Itext:遍历行并获取链接值

时间:2018-05-06 23:36:53

标签: c# sql itext

我的数据库如下:

  • 是PersonID
  • 姓名

动物

  • AnimalID
  • PersonID
  • PetName

我想要实现的是将我的人及其相关动物导出为PDF。

示例:

John Doe:

  • animal1
  • animal2

鲍勃:

  • Animal2
  • Animal3

(动物可以与同一个人联系)。

我有一个iTextSharp导出到PDF模块的问题,因为我找不到处理连接原则的情况。

我现在能够毫无问题地导出我的人员,方法是从SQL中检索它们并将它们放入我实现的DataTable中:

DataTable dt = getPersons();
iTextSharp.text.Document document = new iTextSharp.text.Document();

PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("C:\\sample.pdf", FileMode.Create));
document.Open();

table.SetWidths(widths);

table.WidthPercentage = 100;
int iCol = 0;
string colname = "";
PdfPCell cell = new PdfPCell(new Phrase("Persons:"));

cell.Colspan = dt.Columns.Count;

foreach (DataColumn c in dt.Columns)
{

    table.AddCell(new Phrase(c.ColumnName, font5));
}

foreach (DataRow r in dt.Rows)
{
    if (dt.Rows.Count > 0)
    {
        table.AddCell(new Phrase(r[0].ToString(), font5));
        table.AddCell(new Phrase(r[1].ToString(), font5));
        table.AddCell(new Phrase(r[2].ToString(), font5));
        table.AddCell(new Phrase(r[3].ToString(), font5));
    }
}


document.Add(table);
document.Close();

这将从我的数据库中检索人员(如'SELECT * FROM person')。

但是,我如何在我的pdf中实现与动物(每个人)的链接(仅使用SQL语句,因为我在运行时仅出于预览的原因)?

我是否需要使用2个DataTables,或者我可以采用其他方式吗?

1 个答案:

答案 0 :(得分:2)

您可以拥有一个数据表,但让您的查询加入两个表。

SELECT p.PersonID, p.Name, a.AnimalID, a.PetName 
FROM person AS p
INNER JOIN animal AS a ON p.PersonID = a.PersonID

要干净利落地执行此操作,您需要一个新方法,例如getPersonsAndAnimals(),它返回包含personanimal列的数据表。