2016-05-12 5 views
0

У меня возникли проблемы с таблицей PDFtable и несколькими таблицами. Он рисует первые две таблицы штрафа, но не более двух. Мне нужно, чтобы он работал с таким количеством таблиц, сколько возможно. Кто-нибудь имел это требование раньше?PdfPTable Можно ли добавить несколько таблиц один за другим с инструкцией IF на основе значения?

string firstN=""; 
string firstage=""; 
string firstNV= someValue; 
int firstAgeV=110; 
string firstNHobbie = someHobby; 

string secondN=""; 
string secondage=""; 
string secondNV= someValue2 
int secondAgeV=130; 
string secondNHobbie = someHobby2; 


//If value is not nothing i.e. has a value 
if(firstN != "") 
PdfPTable mTablePerson1= new PdfPTable(5); 
mTablePerson1.WidthPercentage = 110f; 
mTablePerson1.AddCell("Name"); 
mTablePerson1.AddCell("Age"); 
mTablePerson1.AddCell(firstNV); 
mTablePerson1.AddCell(firstAgeV); 

//if selected hobbies 
PdfPTable mTablePerson1Hobbies = new PdfPTable(5); 
mTablePerson1Hobbies.WidthPercentage = 110f; 
mTablePerson1Hobbies.AddCell("Hobby"); 
mTablePerson1Hobbies.AddCell("firstNHobbie"); 

document.Add(mTablePerson1); 
document.Add(mTablePerson1Hobbies); 

}else if(secondN != "") 
PdfPTable mTablePerson2 = new PdfPTable(5); 
mTablePerson2.WidthPercentage = 110f; 
mTablePerson2.AddCell("Name"); 
mTablePerson2.AddCell("Age"); 
mTablePerson2.AddCell(secondNV); 
mTablePerson2.AddCell(secondAgeV); 

//if selected hobbies 
PdfPTable mTablePerson2Hobbies = new PdfPTable(5); 
mTablePerson1Hobbies.WidthPercentage = 110f; 
mTablePerson1Hobbies.AddCell("Hobby"); 
mTablePerson1Hobbies.AddCell("secondNHobbie"); 

document.Add(mTablePerson2); 
document.Add(mTablePerson2Hobbies); 

} 

По какой-то причине этот дизайн скрывает таблицы второго человека в то mTablePerson2 и mTablePerson2Hobbies. Как сделать все таблицы добавленными, если удовлетворяются критерии firstN и secondN?

+0

Ваш код пропускает открывающие скобки. – mkl

+0

Спасибо @mkl Я, должно быть, пропустил это. – Shucoder

ответ

1

По умолчанию iTextSharp отображает только полные строки. Если строка не завершена, эта строка не будет видна. Это будет так, как будто эта строка не существует.

iTextSharp также игнорирует таблицы без строк. Если таблица не имеет строк, таблица не отображается.

Это то, что вызывает проблему:

// You create a table with 5 columns 
PdfPTable mTablePerson2 = new PdfPTable(5); 
// You start the first row: 
mTablePerson2.AddCell("Name");  // column 1 
mTablePerson2.AddCell("Age");  // column 2 
mTablePerson2.AddCell(secondNV); // column 3 
mTablePerson2.AddCell(secondAgeV); // column 4 
// You add the table to the document: 
document.Add(mTablePerson2); 

Как только добавили 4 клеток в ряд с 5 столбцов, эта строка будет отброшен. Поскольку в этой таблице есть только одна строка, и по мере удаления этой строки таблица не отображается.

Изменение new PdfPTable(5) в new PdfPTable(4), или добавить дополнительную ячейку, или использовать метод для завершения строки автоматически, см PdfTable: last cell is not visible

Я объяснил проблему с mTablePerson2, но тот же самый ответ относится к mTablePerson2Hobbies. В этом случае вы создаете таблицу с 5 столбцами, но вы добавляете только 3 ячейки.

Кроме того, у вас есть что-то вроде этого:

if (firstN != "") { 
    // do something 
} 
else if(secondN != "") { 
    // do something else 
} 

Вы жалуетесь, что // do something else не произойдет, если firstN и secondN критерий удовлетворен. Это вопрос элементарной логики.

Если firstN не "" чем // do something будет выполнена, но не // do something else независимо от значения secondN.

Вы хотите что-то вроде этого:

if (firstN != "") { 
    // do something 
} 
if(secondN != "") { 
    // do something else 
} 

Вы должны роняйте else.

UPDATE:

Пусть c1 и c2 являются логические значения, и что у вас есть:

if (c1) 
    do something 
else if (c2) 
    do something else 

Затем эта таблица показывает, что будет происходить:

| conditions | do something | do something else | 
|------------|--------------|-------------------| 
| c1 = false |  ---  |  ---   | 
| c2 = false |    |     | 
|------------|--------------|-------------------| 
| c1 = true |  YES  |  ---   | 
| c2 = false |    |     | 
|------------|--------------|-------------------| 
| c1 = false |  ---  |  YES   | 
| c2 = true |    |     | 
|------------|--------------|-------------------| 
| c1 = true |  YES  |  ---   | 
| c2 = true |    |     | 

Eсть только один набор условий, которые будут «делать что-то еще»: c1 должно быть false и c2 должно быть true.Если c1 - true, ваша программа даже не собирается смотреть значение c2.

Вы хотите, чтобы таблица выглядит следующим образом:

| conditions | do something | do something else | 
|------------|--------------|-------------------| 
| c1 = false |  ---  |  ---   | 
| c2 = false |    |     | 
|------------|--------------|-------------------| 
| c1 = true |  YES  |  ---   | 
| c2 = false |    |     | 
|------------|--------------|-------------------| 
| c1 = false |  ---  |  YES   | 
| c2 = true |    |     | 
|------------|--------------|-------------------| 
| c1 = true |  YES  |  YES   | 
| c2 = true |    |     | 

Для достижения этой цели необходимо:

if (c1) 
    do something 
if (c2) 
    do something else 

Update 2:

В комментариях, вы утверждаете, что вы хотите что-то вроде этого:

| conditions | do something | do something else | 
|------------|--------------|-------------------| 
| c1 = false |  ---  |  ---   | 
| c2 = false |    |     | 
|------------|--------------|-------------------| 
| c1 = true |  YES  |  ---   | 
| c2 = false |    |     | 
|------------|--------------|-------------------| 
| c1 = false |  YES  |  YES   | 
| c2 = true |    |     | 
|------------|--------------|-------------------| 
| c1 = true |  YES  |  YES   | 
| c2 = true |    |     | 

В этом случае, я бы создать два метода:

void doSomething() { 
    // code to draw one table 
} 

void doSomethingElse() { 
    // code to draw another table 
} 

Теперь вы можете добиться того, что вы хотите, как это:

if (c1) { 
    doSomething(); 
} 
else if (c2) { 
    doSomething(); 
    doSomethingElse(); 
} 

Или вы можете сделать это следующим образом:

if (c1 || c2) { 
    doSomething(); 
} 
if (c2) { 
    doSomethingElse(); 
} 

Если вы поедете в школу в Бельгии, это то, что вы узнаете в классе математики в возрасте 16 лет.

+0

Bruno Я получаю такое же поведение, даже когда количество столбцов равно 4 (новый PdfPTable (4)), т. Е. Вторая партия таблиц не заполняется. Я считаю, что проблема связана с тем, как вызываются таблицы, а не с количеством столбцов, или если таблица не имеет строк, поскольку все мои таблицы имеют полные строки. Эта же проблема наблюдается даже тогда, когда столбец установлен на единицу, то есть данные заполняются в первую таблицу, а таблица втягивается в PDF, но вторая таблица не рисуется. Могу ли я заставить пустую строку проверять? – Shucoder

+1

Ваш код был плохо отформатирован. Я внимательно рассмотрел ваш код, и теперь я вижу проблему. Я предположил, что вы задали вопрос iTextSharp. Это не так. Ваш вопрос - это вопрос программирования 101, который так легко решить, что люди, вероятно, не могут поверить, что вы не шутите. –

+0

Fwiw, я узнал что-то со своего поста –