2015-04-13 4 views
0

Поскольку я новичок в ItextSharp, я пытаюсь изменить существующую функциональность на том, как ячейки добавляются в PdfPTable. В настоящее время ячейки добавляются в строку, я хочу, чтобы они были добавлены столбец с помощью петли.ItextSharp: добавление ячеек в таблицу с помощью цикла

Существует два списка, первый список заполняет первый столбец, второй список заполняет весь второй столбец. Если в списках имеется неравный ряд строк, я должен добавить пустые ячейки к этим столбцам.

Я попытался сделать некоторые исследования в Интернете для этого, но не смог найти подходящее решение.

Может ли кто-нибудь предоставить пример для достижения этого?

ответ

2

Я не собираюсь отвечать ни на что iText, поскольку это скорее общая проблема программирования. Основная идея заключается в том, что вам нужно найти максимальное количество двух списков, цикл от нуля до этого максимума и проверить каждый список, чтобы увидеть, попадает ли это значение в диапазон. Если он находится в диапазоне, используйте значение, а если нет, создайте пустую ячейку. Ниже приведен очень простая реализация этого:

''//Two sample lists 
Dim ListA As New List(Of String) From {"A", "B", "C"} 
Dim ListB As New List(Of String) From {"Apple", "Bat"} 

''//Find the maximum count of the two lists 
Dim X = Math.Max(ListA.Count, ListB.Count) 

''//Index notations are zero-based so loop from zero to one 
''//less than the total 
For I = 0 To (X - 1) 


    If I >= ListA.Count Then 
     ''//Our index is past the limit of the first column, add empty cell here 
     Console.WriteLine("<A>") 
    Else 
     ''//Our index is within the limits of the first column 
     Console.WriteLine(ListA(I)) 
    End If 

    If I >= ListB.Count Then 
     ''//Our index is past the limit of the second column, add empty cell here 
     Console.WriteLine("<B>") 
    Else 
     ''//Our index is within the limits of the first column 
     Console.WriteLine(ListB(I)) 
    End If 

Next 

EDIT Если у вас есть больше, чем просто две колонки, которые вы можете экстраполировать это на что-то вроде ниже:

Dim ListA As New List(Of String) From {"A", "B", "C"} 
Dim ListB As New List(Of String) From {"Apple", "Bat"} 
Dim ListC As New List(Of String) From {"Alice", "Bob", "Charlie", "Daniel"} 


Dim AllLists As New List(Of IEnumerable(Of Object)) 
AllLists.Add(ListA) 
AllLists.Add(ListB) 
AllLists.Add(ListC) 
Dim Z = AllLists.Max(Function(l) l.Count) 


For I = 0 To (Z - 1) 
    For Each L In AllLists 
     If I >= L.Count Then 
      Console.WriteLine("<BLANK>") 
     Else 
      Console.WriteLine(L(I).ToString()) 
     End If 
    Next 
Next 
+0

Спасибо Крис за ответ .. Это кажется очень достойным решением для неравных массивов .. но о вопросе ITextSharp .. нет какого-либо способа, который мы можем сделать, сначала заполнив первый столбец, а затем второй, используя цикл? – user3725094

+0

№ Как и в HTML, ячейки добавляются слева направо, сверху вниз. На самом деле в таблицах нет «строк» ​​или «столбцов», у них просто есть «ячейки». Столбец столбца - это, по сути, просто число, необходимое для того, чтобы рендеринг зациклился от одного до этого числа, и когда он достигнут, сбросьте позицию 'x'. –