2016-05-12 52 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如果firstNsecondN滿足標準不會發生。這是一個基本邏輯問題。

如果firstN""// do something將被執行,但不// do something else無論secondN值。

你想是這樣的:

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

你應該放下else

UPDATE:

假設c1c2是布爾值,並且您有:

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 |    |     | 

有隻有一組將會「做別的事情」的條件:c1需要是falsec2需要爲true。如果c1true,您的程序甚至不會查看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 

更新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)),即使第二批表沒有被填充,我也會得到相同的行爲。我相信問題是如何調用這些表,而不是列數問題,或者如果表沒有行,因爲我所有的表都有完整的行。即使當列設置爲1時,也可以看到同樣的問題,即數據被填充到第一個表格中,並且表格被繪製到PDF中,但沒有繪製第二個表格。我可以強制空白行進行測試嗎? – Shucoder

+1

您的代碼格式不正確。我仔細研究了你的代碼,現在我發現了這個問題。我以爲你問了一個iTextSharp問題。你不是。你的問題是一個101編程問題,很容易解決,人們可能無法相信你不會開玩笑。 –

+0

Fwiw,我從你的帖子中學到了一些東西 –

相關問題