NestedTable.cs
//
// This code is part of GrapeCity Documents for Word samples.
// Copyright (c) GrapeCity, Inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Word;

namespace GcWordWeb.Samples
{
    // This sample creates a simple table and adds another (nested)
    // table into a cell of the first table.
    public class NestedTable
    {
        public GcWordDocument CreateDocx()
        {
            GcWordDocument doc = new GcWordDocument();

            doc.Body.Sections.First.GetRange().Paragraphs.Add("Here is a 5 columns by 3 rows table, with a nested table in cell (2, 2):");
            var t = doc.Body.Sections.First.GetRange().Tables.Add(new string[][]
                {
                    new string[] { "row 1, col 1", "row 1, col 2", "row 1, col 3", "row 1, col 4", "row 1, col 5",  },
                    new string[] { "row 2, col 1", "row 2, col 2", "row 2, col 3", "row 2, col 4", "row 2, col 5",  },
                    new string[] { "row 3, col 1", "row 3, col 2", "row 3, col 3", "row 3, col 4", "row 3, col 5",  },
                }
            );
            // Create a new table style:
            var ts1 = doc.Styles.Add("Table Style 1", StyleType.Table);
            // We can enumerate all table borders, including inside borders:
            foreach (var border in ts1.Table.Borders)
            {
                border.LineStyle = LineStyle.Triple;
                border.LineWidth = 0.5f;
                border.Color.RGB = Color.Purple;
            }
            // Assign the style to the table:
            t.Style = ts1;

            // Overwrite inside border's line styles:
            ts1.Table.Borders.InsideHorizontal.LineStyle =
                ts1.Table.Borders.InsideVertical.LineStyle =
                LineStyle.Double;
            // Add some padding:
            ts1.Table.Padding.All = 3;

            // Set up cell (1,1) to visually span two following cells:
            var cell = t.Rows[1].Cells[1];
            var tn = cell.GetRange().Tables.Add();
            cell.GetRange().Paragraphs.First.GetRange().Texts.First.Value = "Cell with nested table.";

            tn.Rows.Add("Nested (1,1)", "Nested (1,2)", "Nested (1,3)");
            tn.Rows.Add("Nested (2,1)", "Nested (2,2)", "Nested (2,3)");
            tn.Rows.Add("Nested (3,1)", "Nested (3,2)", "Nested (3,3)");

            // Done:
            return doc;
        }
    }
}