How to write tables in columns layout with ItextSharp - itext

I'm writing a report with itextsharp with tables organized horizontally in groups of four, but all tables appears one beneath the other vertically. How can I write each table NEXT to the other?

There's two ways that you can accomplish this. The first is to create a 4 column outer table and add your tables to the cells within that table. The second way is to just fix the width of each table and use the PdfPTable instance method WriteSelectedRows() to write your tables at exact x,y coordinates. See my post here for how to do the latter.

Related

Soft artisans ExcelWriter Data Binding - Insert Cells Instead of Rows

According to the article
http://wiki.softartisans.com/display/EW8/How+ExcelWriter+Inserts+Rows
ExcelWriter inserts a new row for every row in the dataset. What if my dataset has 5 columns, for each row, I want ExcelWrite just to insert 5 cells and only expand the table for those 5 columns, not the entire row. Is it doable? Thanks.
I do not believe ExcelTemplate has this functionality. I believe ExcelTemplate will always insert a new row.
If you can use ExcelApplication, Import Data may work for your needs. It can be done on an area or a worksheet.
See http://wiki.softartisans.com/display/EW9/Area.ImportData and
http://wiki.softartisans.com/display/EW9/Worksheet.ImportData

How to list multiple rows within Table component specific column?

I have Table and I want to display multiple row in same band like the below image
I have tried with by Adding frame inside the table column and using list component to list multiple rows but it wont works.
like the following hierarchy
Table-->Detail band-->Column-->Frame-->list component-->TextField
Can any one help me How to Solve this ? thanks in advance
There are two ways of doing it.
Way 1:
Put a sub report into last column. Pass the data to it. This way there would be multiple fields in it.
Way 2:
Use groups and custom styles along with groups(styles and groups will have to manages logically).
I think you should go for way 1 if the data in your last column does not span more than one page. Otherwise way 2 is applicable.

2 Table Rows per 1 Database Table Row

I'm working on a table in iReport designer where I pull in info from a database. As of right now, I have it so that one row of the table corresponds to one row in the database.
How can I make it so that one entry in the database can take up two rows. The first row would have 4 columns corresponding to a field in the database. The second row would have 1 column the same length as the 4 above columns combined and also correspond to one field. When editing an iReport designer table, there doesn't seem to be an option to add more rows, only columns.
I found a much easier workaround. I created a one column table, then dragged and dropped static text and fields in certain spots to make the report look like it had multiple columns.

Y position while composing a PdfPTable

I'm building a pdfptable thru ItextSharp, but I need to know, while I'm adding cells, my Y position in the page. Cells have a variable height.
I need to know it to avoid tu put a new 'Breaking title' in the table if this would go on the last table row, as it should go on a new page (on cust request).
I tried writer.getverticalPosition() but it seems not reliable in composing a table.
Is there a way to know it ?
There's a contradiction in your question. Let me explain what doesn't make sense.
You create a PdfPTable, let say you have an object named table. when you add cells to table, the object grows. Plenty of data is stored into memory.
Now you say: I want to know the Y position of the rows on the page while I'm adding cells.
Which page? There may not even be a page? As long as you build the table object, there is no page, there are no Y positions. One table could be 200pt heigh when added to a page with a width of 400pt. The same table could be 400pt heigh when added to a page with a width of 200pt. It isn't until you add the table object to a Document that the table gets its shape.
If you want to make sure a "title" isn't the last row on a page, you should break up your table in smaller parts. Create a subtable and add it to the document. Now use getVerticalPosition() and check how much space is left. If there isn't sufficient space for the first X rows of the next subtable, move to a newPage() and add the next table there, otherwise add the table on the current page.
If you define the widths correctly, nobody will see that you've been adding more than one table: it will look as if you added one large table instead of different small ones. If you don't know how to calculate the height of the rows in the subtables, please note that you need to define the total width of the table and lock the widths. For the reason explaiined above, no software can calculate the height of a table if it doesn't have any info about its width.

Is it possible to create a row that spans all columns of a Matrix in SSRS 2008?

Is it possible to have add a row to an SSRS 2008 Matrix that spans all of the matrix's columns?
This crude diagram shows roughly what I'm looking for:
The basic idea is that each line item is a person, and each column is a field in a form for that person. The fields themselves are dynamic (and implemented as column groups on the matrix). Additional column groups are included to append non-dynamic form fields, like the time the record was entered and who entered it. Under each person's record is a comments field, which should span all of the form fields above it.
At the moment I have the matrix embedded in another tablix, with the name and fields in the matrix and the comments in the parent tablix. This works for the data (each instance of the matrix ends up being one row), but the header repeats too often (once per person) because it's attached to the matrix. The only thought I have as to how to fix this is to create another matrix in the parent tablix with the same grouping and use it to display the headers... But this will require quite a lot of manual synchronization to keep the two matrices the same.
Edit: The key problem here is making the second row span multiple column groups.
Here's what you can do:
Select the column grouping you want to add above and right click and select
Add Group... Parent Group...
Group the column by something that will not aggregate the data. You'll have to select a field from your dataset to group by so that it creates an overlapping column grouping.
Check the Add group header box
You should now see something similar to this:
Now you just need to move the Value1 field and it's header over under the new column to the right beyond the matrix dividers. Once that's done, simply delete the ungrouped column where you just copied Value1 from and be sure to select Delete columns only checkbox.
Your finished product should look like this:
It is possible - And the above answers are partial answers leaving out one key step: Merging the cells of the child row.
First, right click on your grouped row, then select Insert Row -> Inside Group - Below and you will get two rows with the cells aligning on the columns
Second, ctrl click all the cells in your new row (ie row without the data) then right click on one of the highlighted cells, and then select Merge Cells.
Now you have the table you like. To add a value to the new row: first right click your new (multi column) cell,select Create Placeholder, and then add the dataset item you desire to the placeholder.
[Edit]
After several attempts, I'm going to say this isn't possible in SSRS. The best I could come up with is a group footer that spans columns 1,2, and 3, but not the User column.
[Original Response]
I recently did something similar to this.
First, what tool are you using to create SSRS reports? (I used SQL Server Business Intelligence Development Studio)
You'll want to create a row group (grouped on Person)
Append a row to your table in "Design" view (Right click, "Insert Row --> Inside Group - Below").
Add an expression to the row that pulls the value for your "Comment" column (=Fields!Comment.Value).
Let me know if that helps...
Try adding in you column group "header" with a grouping expression of (1=1). Then a detail field will need to be defined. If you define the other group with correct data then the "header" will stretch across all details columns. You may need to merger depending on other options.
The easiest way to do this is to create a Tablix with only one column, and your row grouping.
Then, you create two rows inside this group.
In the first row inside the group, you insert a Matrix, wich you can then subgroup as you prefer.
I just had a similar problem, and this was my solution.
I banged my head against the wall for a lot of time, until i realized the solution to my problem wasn't "making a cell span multiple column groups", but "making a cell split into multiple column groups".
You can accomplish the goal by using a subreport for each person. The subreport will receive the employee id and create the hierarchy for you. Make sure your subreport column widths match the widths of the parent report.