Я использую itextSharp
для экспорта DataTable в таблицу pdf. Я могу экспортировать данные в таблицу pdf, используя код примера, который я разместил ниже. DataTable содержит около 21 столбца.Как слить первые 3 столбца для строк с одинаковым значением в PDF
Первый столбец в pdf (DataTable) может содержать одинаковые значения для любого количества строк. Если значения данных в первом столбце для группы строк аналогичны, я хочу объединить первые три столбца этих строк как одну ячейку.
У меня возникли проблемы с изменением кода ниже, чтобы достичь этого.
public iTextSharp.text.Table GetItextTable(DataTable dtChartData, string reportType)
{
int intCols = dtChartData.Columns.Count; //Total number of columns
int intRows = dtChartData.Rows.Count; //Total number of rows
iTextSharp.text.Table pdfTable = new iTextSharp.text.Table(intCols, intRows);
try
{
pdfTable.BorderWidth = 1;
pdfTable.Width = 100;
pdfTable.Padding = 1;
pdfTable.Spacing = 1;
/*creating table headers */
for (int i = 0; i < intCols; i++)
{
iTextSharp.text.Cell cellCols = new iTextSharp.text.Cell();
iTextSharp.text.Font ColFont = iTextSharp.text.FontFactory.GetFont("Tahoma", 07,
iTextSharp.text.Font.BOLD);
for (int l = 0; l < dtChartData.Columns.Count; l++)
{
if (dtChartData.Columns[l].ColumnName.Contains("_"))
{
dtChartData.Columns[l].ColumnName = dtChartData.Columns[l].ColumnName.Replace("_", " ");
}
}
iTextSharp.text.Chunk chunkCols = new iTextSharp.text.Chunk(dtChartData.Columns[i].ColumnName,ColFont);
cellCols.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
if ((chunkCols.ToString().ToLower() == "ReportDetails"))
{
cellCols.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
}
}
/* loop that take values from every row in datatable and insert in itextsharp table */
for (int k = 0; k < intRows; k++)
{
for (int j = 0; j < intCols; j++)
{
iTextSharp.text.Cell cellRows = new iTextSharp.text.Cell();
iTextSharp.text.Font RowFont = iTextSharp.text.FontFactory.GetFont("Tahoma", 07);
iTextSharp.text.Chunk chunkRows = new iTextSharp.text.Chunk(dtChartData.Rows[k][j].ToString(),RowFont);
cellRows.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
cellRows.Add(chunkRows);
pdfTable.AddCell(cellRows);
}
}
}
catch (Exception ex)
{
//error handling code here removed
}
return pdfTable;
}
проблема я имею логика, чтобы проверить, если строки первого столбца имеют одинаковое значение. – StackTrace
Это не проблема iTextSharp. iTextSharp не выполнит эту проверку для вас. Проверка того, что строка 'a' идентична строке' b', и если строка 'b' идентична строке' c', не должна быть проблемой. Что вы пробовали? Почему это не сработало? –
Я согласен с Бруно. Я бы добавил, что на этом этапе я бы рекомендовал временно приостановить использование iTextSharp. Вместо этого сосредоточьтесь исключительно на 'DataTable'. Если он исходит из системы SQL, вы можете бросить на нее некоторую логику SQL, чтобы получить ее, как вы хотите. Если вы только на C#, то сделайте быстрое представление WinForm или ASP.Net WebForm над своей «DataTable» и примените любую логику, в которой вы нуждаетесь. Как только вы получите это, вы можете легко привязать его к вашему опубликованному коду для работы с iTextSharp. –