Skip to main content
All docs
V24.1

Tables in Blazor Rich Text Editor

  • 6 minutes to read

This topic contains examples of how to create, customize, and remove tables in the Rich Text Editor.

Create Tables

Call the CreateAsync method to add a table to a sub-document:

<DxRichEdit @ref="richEdit" />

@code {
    DxRichEdit richEdit;
    protected override async Task OnAfterRenderAsync(bool firstRender) {
        if (firstRender)
            try {
                await InitializeDocument();
            }
            catch (TaskCanceledException) { }
        await base.OnAfterRenderAsync(firstRender);
    }

    async Task InitializeDocument() {
    /* Surround the code that contains an asynchronous operation with a try-catch block to handle
    the OperationCanceledException. This exception is thrown when an asynchronous operation is canceled. */
        try {
            var columnCount = 4;
            var rowCount = 5;
            Table firstTable = await richEdit.DocumentAPI.Tables.CreateAsync(0, columnCount, rowCount);
        }
        catch (OperationCanceledException e) {
            Console.WriteLine($"{nameof(OperationCanceledException)} thrown with message: {e.Message}");
        }
    }
}

Find Tables

Call the GetAsync method to obtain a table with the specified index:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);

Populate Tables with Content

A cell stores its position in the sub document in the Interval property. Pass the position to one of the following methods to populate the table cell with content:

AddHtmlAsync
Inserts text in HTML format.
AddRtfAsync
Inserts text in Rich Text Format (RTF).
AddTextAsync
Inserts the specified text.
Fields.CreateAsync
Inserts a field with the specified code.
Hyperlinks.CreateAsync
Inserts a hyperlink with the specified text.
Images.CreateAsync
Inserts an image from a specified image source.
InlineImages.CreateAsync
Inserts an inline image from a specified image source.
Paragraphs.CreateAsync
Inserts a paragraph mark and creates a new paragraph.
Tables.CreateAsync
Inserts a table with the specified column and row count.

The following code snippet populates table cells with text:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
for (int i = firstTable.Rows.Count - 1; i >= 0 ; i--)
    for (int j = firstTable.Rows[i].Cells.Count - 1; j >= 0 ; j--) {
        var cellPosition = myTable.Rows[i].Cells[j].Interval.Start;
        await richEdit.DocumentAPI.AddTextAsync(cellPosition, "sample text");
}

Add and Remove Rows

Use the Rows property to access the table row collection. Call the InsertAsync method to insert a new row above or below the specified row. The RemoveAsync method allows you to remove a table row.

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await firstTable.Rows.RemoveAsync(0);                                // Removes the first row
await firstTable.Rows.InsertAsync(0, false);                         // Inserts a row above the first row
await firstTable.Rows.InsertAsync(firstTable.Rows.Count - 1, true);  // Inserts a row below the last row

Add and Remove Columns

A table consists of cells combined into rows. Call the InsertAsync/RemoveAsync method to add/remove a cell to/from the row. Perform this action for each table row to add or remove a table column. The following example removes an existing column and adds two new columns to the first table:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
foreach (TableRow row in firstTable.Rows) {
    await row.Cells.RemoveAsync(0);                         // Removes the first cell
    await row.Cells.InsertAsync(0);                         // Inserts a cell to the left of the first cell
    await row.Cells.InsertAsync(row.Cells.Count - 1, true); // Inserts a cell to the right of the last cell
}

Merge and Split Cells

Call the MergeCellsAsync method to merge multiple cells in a range. The following example merges 6 cells:

var firstTable = richEdit.DocumentAPI.Tables.CreateAsync(0, 5, 4);
var startPosition = new TableCellPosition(0, 0); // The first cell in the first row
var endPosition = new TableCellPosition(2, 1);   // The second cell in the third row
await firstTable.MergeCellsAsync(startPosition, endPosition);

Call the SplitAsync method to split a cell into multiple smaller cells. The following code snippet splits the first cell into 6 cells (3 columns and 2 rows):

var firstTable = richEdit.DocumentAPI.Tables.CreateAsync(0, 3, 4);
await firstTable.Rows[0].Cells[0].SplitAsync(3, 2);

Customize Appearance

Call the ChangePropertiesAsync method of a table, row, or cell to customize its appearance. Most appearance settings can be set both for the table and cell. Cell settings take priority over table settings.

Resize Tables

Specify the following properties to change the table size:

TableProperties.AutoFit
Specifies whether to automatically increase the table’s width to fit table content.
TableProperties.Width
Provides access to the table’s width settings.
TableCellProperties.Width
Provides access to the cell’s width settings.
TableRowProperties.Height
Provides access to the row’s height settings.

The following code snippet resizes a table as follows:

  • Sets the table width to the page width
  • Sets the first column’s width to half the table width
  • Sets each row’s height to 1 centimeter
var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await firstTable.ChangePropertiesAsync(properties => {
    properties.Width.Type = TableWidthType.Percent;
    properties.Width.Value = 100;
});
foreach (TableRow row in firstTable.Rows) {
    await row.ChangePropertiesAsync(properties => {
        properties.Height.Type = TableRowHeightType.Exact;
        properties.Height.Value = UnitConverter.CentimetersToTwips(1);
    });
    await row.Cells[0].ChangePropertiesAsync(properties => {
        properties.Width = new TableWidth(TableWidthType.Percent, 50);
    });
}

To adjust table width to table content, configure size settings as follows:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await firstTable.ChangePropertiesAsync(properties => {
    properties.AutoFit = true;
});
foreach (TableRow row in firstTable.Rows) 
    foreach (TableCell cell in row.Cells)
        await cell.ChangePropertiesAsync(properties => {
            properties.Width.Type = TableWidthType.Auto;
        });

Apply Table Styles

Use the StyleName property to apply a style to the table. This property accepts TableStyleName properties or style strings (for example, Grid Table 1 Light Accent 6). Specify TableStyleOptions to apply/remove special formatting to/from the first, last, and odd columns and rows.

The following example applies the Grid Table 4 Accent 4 style to the table and highlights the first column and row:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await firstTable.ChangePropertiesAsync(properties => {
    properties.StyleName = TableStyleName.GridTable4Accent4;
    properties.TableStyleOptions = TableStyleOptions.FirstColumn | TableStyleOptions.HeaderRow;
});

Change Text Formatting

Specify the CharacterProperties setting to change text formatting for cell characters. The following code example sets font name, size, and color for all characters in the first table:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
foreach (TableRow row in firstTable.Rows)
    foreach (TableCell cell in row.Cells) 
        await cell.ChangePropertiesAsync(properties => {
            properties.CharacterProperties.FontName = "Arial";
            properties.CharacterProperties.FontSize = 16;
            properties.CharacterProperties.ForegroundColor = System.Drawing.Color.Blue;
        });

Align Table Content

Specify ContentHorizontalAlignment and ContentVerticalAlignment setting of the table or cell to align table or cell content. The following example aligns table content horizontally and vertically:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await firstTable.ChangePropertiesAsync(properties => {
    properties.ContentHorizontalAlignment = HorizontalAlignment.Left;
    properties.ContentVerticalAlignment = VerticalAlignment.Center;
});
foreach (TableCell cell in firstTable.Rows[0].Cells){
    await cell.ChangePropertiesAsync(properties => {
        properties.ContentHorizontalAlignment = HorizontalAlignment.Center;
    });
}

Customize Borders

You can customize all table borders simultaneously or access and customize a particular border. Border settings include line color, style, and width. The following example hides all table borders except for the first row’s bottom border:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await firstTable.ChangePropertiesAsync(properties => {
    properties.Borders = new TableBorders(BorderLineStyle.None, System.Drawing.Color.Black, 20);
    properties.Width = new TableWidth(TableWidthType.Percent, 100);
});
foreach (TableCell cell in firstTable.Rows[0].Cells) {
    await cell.ChangePropertiesAsync(properties => {
        properties.Borders.Bottom = new TableBorder(BorderLineStyle.Single, System.Drawing.Color.Black, 20);
    });
}

Add Shading

Specify the BackgroundColor setting of the table or cell to change its background color. The following example applies different background colors to odd and even table rows:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await firstTable.ChangePropertiesAsync(properties => {
    properties.BackgroundColor = System.Drawing.Color.LightBlue;
});
foreach (TableRow row in firstTable.Rows)
    foreach (TableCell cell in row.Cells)
        if (cell.ParentRow.Index % 2 == 0)
            await cell.ChangePropertiesAsync(properties => {
                properties.BackgroundColor = System.Drawing.Color.AliceBlue;
            });

Remove Tables

Pass a table’s interval to the RemoveAsync method to remove the table:

var firstTable = await richEdit.DocumentAPI.Tables.GetAsync(0);
await richEdit.DocumentAPI.RemoveAsync(firstTable.Interval);