简体   繁体   中英

MigraDoc - Table Border but no Cell/Row/Column Borders

I am struggling to implement what seems should be something straight forward, but having not much luck. I need a MigraDoc table to render with just the Table border, excluding all cells in between:

在此处输入图片说明

I have followed the remarks on this post:

How do you add a border around a table in MigraDoc?

Useful information but I havent been able to implement a full fix from it? I have the following code run just before the table is added to the section:

        table.Borders.Visible = true;
        for (int i = 0; i < table.Rows.Count - 2; i++)
        {
            table.Rows[i].Borders.Bottom.Visible = false;
        }

Which at first seemed like it did the job... until I come across a table that follows onto the next page... The bottom row border is obviously only rendered for the very bottom row and does not account for PageBreaks mid-table.

Surely there must be a better way of doing this?

EDIT: I appreciate this is somewhat of an old question, but just incase anyone ends up here looking for an answer...

Try using the SetEdge option. There's two ways you could do it, depending on whether you know how many table rows or columns you're going to have (static content), or you don't know yet (dynamic content).

Option 1: Static table content

Set your table up first, so all the columns, cells and rows exist, then add an edge border to your table with

table.SetEdge(a, b, x, y, Edge.Box, BorderStyle.Single, 1, Colors.Black);

The first four numbers a, b, x, y indicate which of the table cells you want to add a borders to, the first two numbers are the top left column then row (in your case to border the whole table, this should be 0, 0 ) and the second two numbers are the bottom right corner column then row (as per your example this is 3, 4 , assuming the heading is a heading row).

After Edge.Box , the options are border style, border width, border color .

You can then add any extra individual borders per cell or row after as normal, so to add a border at the bottom of your header row as per your example...

headerRow.Borders.Bottom.Width = 0.2;
headerRow.Borders.Bottom.Color = Colors.Black;

Option 2: Dynamic table content

If you don't know how many rows or columns are in your table becuase the content is dynamic, the first four numbers in SetEdge could be set with this.table.Columns.Count and this.table.Rows.Count - for example :

table.SetEdge(0, 0, this.table.Columns.Count, this.table.Rows.Count, Edge.Box, BorderStyle.Single, 1, Colors.Black);

References

For more info, see this post: https://forum.pdfsharp.net/viewtopic.php?f=2&t=3598

And it's also here in the MigraDoc Example (search for SetEdge): http://pdfsharp.net/wiki/HelloMigraDoc-sample.ashx

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM