How to apply formatting for table rows


This code example shows how to set a height for a table row, repeat a row as header on each page, shift a row by N columns to the right.

Complete code

using SautinSoft.Document;
using SautinSoft.Document.Drawing;
using SautinSoft.Document.Tables;
using System.Linq;

namespace Example
{
    class Program
    {
        static void Main(string[] args)
        {
            // Get your free 30-day key here:   
            // https://sautinsoft.com/start-for-free/

            TableRowFormatting();
        }
        /// <summary>
        /// Shows how to set a height for a table row, repeat a row as header on each page, shift a row by N columns to the right.
        /// </summary>
        /// <remarks>
        /// Details: https://sautinsoft.com/products/document/help/net/developer-guide/tablerow-format.php
        /// </remarks>
        static void TableRowFormatting()
        {
            string docxPath = @"FormattedTable.docx";

            // Let's create document.
            DocumentCore dc = new DocumentCore();

            Section s = new Section(dc);
            dc.Sections.Add(s);


            int rows = 30;
            int columns = 5;

            Table t = new Table(dc, rows, columns);
            t.TableFormat.PreferredWidth = new TableWidth(100, TableWidthUnit.Percentage);
            t.TableFormat.Borders.SetBorders(MultipleBorderTypes.All, BorderStyle.Single, Color.DarkGray, 1);
            t.TableFormat.AutomaticallyResizeToFitContents = false;
            s.Blocks.Add(t);

            // Specify row height:
            // 10 mm - for odd rows.
            // 15 mm - for even rows.
            double oddHeight = LengthUnitConverter.Convert(10, LengthUnit.Millimeter, LengthUnit.Point);
            double evenHeight = LengthUnitConverter.Convert(15, LengthUnit.Millimeter, LengthUnit.Point);
            for (int r = 0; r < t.Rows.Count; r++)
            {
                TableRow row = t.Rows[r];
                if (r % 2 != 0)
                    row.RowFormat.Height = new TableRowHeight(evenHeight, HeightRule.AtLeast);
                else
                    row.RowFormat.Height = new TableRowHeight(oddHeight, HeightRule.AtLeast);
            }

            // Add the table caption - mark the specific row (for example: 0) to repeat on each page.
            TableRow firstRow = t.Rows[0];
            // Repeate as header row at the top of each page.
            // Note: Only the first row in the table can be set up as header.
            firstRow.RowFormat.RepeatOnEachPage = true;

            // Merge all cells into a one in the first row (Caption).
            int colSpan = firstRow.Cells.Count;
            for (int c = firstRow.Cells.Count - 1; c>=1; c--)
            {
                firstRow.Cells.RemoveAt(c);
            }
            // Specify how many columns this cell will take up.
            firstRow.Cells[0].ColumnSpan = colSpan;

            // Set the table caption in the first row and first cell. 
            Paragraph p = new Paragraph(dc);
            p.Inlines.Add(new Run(dc, "This is the Row 0 (RepeatOnEachPage = true)", new CharacterFormat() { FontColor = Color.Blue, Size = 20 }));
            p.ParagraphFormat.Alignment = HorizontalAlignment.Center;
            t.Rows[0].Cells[0].Blocks.Add(p);

            // Another interesting properties of TableRowFormat:
            // GridBefore and GridAfter
            // Add "Total" at the end of the table.
            TableRow rowTotal = new TableRow(dc);
            rowTotal.Cells.Add(new TableCell(dc));
            rowTotal.Cells[0].Content.Start.Insert(string.Format("Total rows: {0}", rows), new CharacterFormat() { FontColor = Color.Red, Size = 30 });
            
            // Shift the rowTotal to the right corner.
            // In our case, shift on 4 columns.
            rowTotal.RowFormat.GridBefore = columns-1;
            

            rowTotal.RowFormat.Height = new TableRowHeight(evenHeight, HeightRule.AtLeast);
            t.Rows.Add(rowTotal);            

            // Save our document into DOCX format.
            dc.Save(docxPath);

            // Open the result for demonstration purposes.
            System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(docxPath) { UseShellExecute = true });
        }
    }
}

Download

Imports SautinSoft.Document
Imports SautinSoft.Document.Drawing
Imports SautinSoft.Document.Tables
Imports System.Linq

Namespace Example
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			TableRowFormatting()
		End Sub
                ''' Get your free 30-day key here:   
                ''' https://sautinsoft.com/start-for-free/
		''' <summary>
		''' Shows how to set a height for a table row, repeat a row as header on each page, shift a row by N columns to the right.
		''' </summary>
		''' <remarks>
		''' Details: https://sautinsoft.com/products/document/help/net/developer-guide/tablerow-format.php
		''' </remarks>
		Private Shared Sub TableRowFormatting()
			Dim docxPath As String = "FormattedTable.docx"

			' Let's create document.
			Dim dc As New DocumentCore()

			Dim s As New Section(dc)
			dc.Sections.Add(s)


			Dim rows As Integer = 30
			Dim columns As Integer = 5

			Dim t As New Table(dc, rows, columns)
			t.TableFormat.PreferredWidth = New TableWidth(100, TableWidthUnit.Percentage)
			t.TableFormat.Borders.SetBorders(MultipleBorderTypes.All, BorderStyle.Single, Color.DarkGray, 1)
			t.TableFormat.AutomaticallyResizeToFitContents = False
			s.Blocks.Add(t)

			' Specify row height:
			' 10 mm - for odd rows.
			' 15 mm - for even rows.
			Dim oddHeight As Double = LengthUnitConverter.Convert(10, LengthUnit.Millimeter, LengthUnit.Point)
			Dim evenHeight As Double = LengthUnitConverter.Convert(15, LengthUnit.Millimeter, LengthUnit.Point)
			For r As Integer = 0 To t.Rows.Count - 1
				Dim row As TableRow = t.Rows(r)
				If r Mod 2 <> 0 Then
					row.RowFormat.Height = New TableRowHeight(evenHeight, HeightRule.AtLeast)
				Else
					row.RowFormat.Height = New TableRowHeight(oddHeight, HeightRule.AtLeast)
				End If
			Next r

			' Add the table caption - mark the specific row (for example: 0) to repeat on each page.
			Dim firstRow As TableRow = t.Rows(0)
			' Repeate as header row at the top of each page.
			' Note: Only the first row in the table can be set up as header.
			firstRow.RowFormat.RepeatOnEachPage = True

			' Merge all cells into a one in the first row (Caption).
			Dim colSpan As Integer = firstRow.Cells.Count
			For c As Integer = firstRow.Cells.Count - 1 To 1 Step -1
				firstRow.Cells.RemoveAt(c)
			Next c
			' Specify how many columns this cell will take up.
			firstRow.Cells(0).ColumnSpan = colSpan

			' Set the table caption in the first row and first cell. 
			Dim p As New Paragraph(dc)
			p.Inlines.Add(New Run(dc, "This is the Row 0 (RepeatOnEachPage = true)", New CharacterFormat() With {
				.FontColor = Color.Blue,
				.Size = 20
			}))
			p.ParagraphFormat.Alignment = HorizontalAlignment.Center
			t.Rows(0).Cells(0).Blocks.Add(p)

			' Another interesting properties of TableRowFormat:
			' GridBefore and GridAfter
			' Add "Total" at the end of the table.
			Dim rowTotal As New TableRow(dc)
			rowTotal.Cells.Add(New TableCell(dc))
			rowTotal.Cells(0).Content.Start.Insert(String.Format("Total rows: {0}", rows), New CharacterFormat() With {
				.FontColor = Color.Red,
				.Size = 30
			})

			' Shift the rowTotal to the right corner.
			' In our case, shift on 4 columns.
			rowTotal.RowFormat.GridBefore = columns-1


			rowTotal.RowFormat.Height = New TableRowHeight(evenHeight, HeightRule.AtLeast)
			t.Rows.Add(rowTotal)

			' Save our document into DOCX format.
			dc.Save(docxPath)

			' Open the result for demonstration purposes.
			System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(docxPath) With {.UseShellExecute = True})
		End Sub
	End Class
End Namespace

Download


If you need a new code example or have a question: email us at support@sautinsoft.com or ask at Online Chat (right-bottom corner of this page) or use the Form below:



Questions and suggestions from you are always welcome!

We are developing .Net components since 2002. We know PDF, DOCX, RTF, HTML, XLSX and Images formats. If you need any assistance with creating, modifying or converting documents in various formats, we can help you. We will write any code example for you absolutely free.