# Sample Code: How to Format Selected Table Cells

> TX Text Control 17.0 introduced column-level table cell selection with click-and-drag support. This C# code sample formats selected cells programmatically by determining the selection start and end row-column positions and iterating the TableCellCollection to apply formatting.

- **Author:** Bjoern Meyer
- **Published:** 2012-03-19
- **Modified:** 2026-07-17
- **Description:** TX Text Control 17.0 introduced column-level table cell selection with click-and-drag support. This C# code sample formats selected cells programmatically by determining the selection start and end row-column positions and iterating the TableCellCollection to apply formatting.
- **1 min read** (186 words)
- **Tags:**
  - Sample
- **Web URL:** https://www.textcontrol.com/blog/2012/03/19/sample-code-how-to-format-selected-table-cells/
- **LLMs URL:** https://www.textcontrol.com/blog/2012/03/19/sample-code-how-to-format-selected-table-cells/llms.txt
- **LLMs-Full URL:** https://www.textcontrol.com/blog/2012/03/19/sample-code-how-to-format-selected-table-cells/llms-full.txt

---

With the introduction of version 17.0, TX Text Control users can now select table columns with one click on the down arrow in the first table row. Or you can simply click and drag to select some cells. Additionally, you no longer have to select cells row-wise. Multiple cells can be selected in the middle of a table.

The shipped dialog box can be used to modify the cell formatting of selected table cells. The following code shows how to format selected cells using the API instead of the dialog box.

```
private void SetCellFormat(TableCellFormat CellFormat)
{
    Table table = textControl1.Tables.GetItem();

    if (table == null)
        return;

    Selection curSelection = new Selection(
        textControl1.Selection.Start,
        textControl1.Selection.Length);

    textControl1.Selection.Length = 0;

    // start row and col
    int iTableStartRow = table.Cells.GetItem().Row;
    int iTableStartCol = table.Cells.GetItem().Column;

    textControl1.Selection.Start =
        curSelection.Start + curSelection.Length - 1;

    // end row and col
    int iTableEndRow = table.Cells.GetItem().Row;
    int iTableEndCol = table.Cells.GetItem().Column;

    // loop through all cells and check whether they are in the
    // range of selected cells
    foreach (TableCell cell in textControl1.Tables.GetItem().Cells)
    {
        if (cell.Row >= iTableStartRow &&
            cell.Row <= iTableEndRow &&
            cell.Column <= iTableEndCol &&
            cell.Column >= iTableStartCol)

            cell.CellFormat = CellFormat;
    }
}
```

The code pretty straightforward: Using the [TableCellCollection.GetItem](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.tablecellcollection.getitem.method.htm) method, the table row and column at the beginning and the end of the selection is stored in a variable. Then, all cells are iterated using the [TableCellCollection](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.tablecellcollection.class.htm). Each cell's row and column property is checked whether it is in the range of the selected cells.

---

## About Bjoern Meyer

As CEO, Bjoern is the visionary behind our strategic direction and business development, bridging the gap between our customers and engineering teams. His deep passion for coding and web technologies drives the creation of innovative products. If you're at a tech conference, be sure to stop by our booth - you'll most likely meet Bjoern in person. With an advanced graduate degree (Dipl. Inf.) in Computer Science, specializing in AI, from the University of Bremen, Bjoern brings significant expertise to his role. In his spare time, Bjoern enjoys running, paragliding, mountain biking, and playing the piano.

- [LinkedIn](https://www.linkedin.com/in/bjoernmeyer/)
- [X](https://x.com/txbjoern)
- [GitHub](https://github.com/bjoerntx)

---

## Related Posts

- [Create a Table of Contents in Windows Forms using C#](https://www.textcontrol.com/blog/2023/01/23/create-toc-in-windows-forms/llms.txt)
- [Official TX Text Control .NET Sample Applications Are Now Hosted on GitHub](https://www.textcontrol.com/blog/2023/01/08/official-tx-text-control-net-sample-applications-are-now-hosted-on-github/llms.txt)
- [Detect Toggle Button Changes Using a MutationObserver](https://www.textcontrol.com/blog/2021/11/11/detect-toggle-button-changes-using-a-mutationobserver/llms.txt)
- [Two Ways to Restart Numbered Lists in TX Text Control](https://www.textcontrol.com/blog/2021/11/03/two-ways-to-restart-numbered-lists/llms.txt)
- [Zoom Tricks: Disabling CTRL + MOUSE WHEEL and More](https://www.textcontrol.com/blog/2020/12/09/zoom-tricks-disabling-ctrl-mouse-wheel-and-more/llms.txt)
- [AutoCorrect Using TX Text Control and TX Spell .NET](https://www.textcontrol.com/blog/2017/08/17/autocorrect-using-tx-text-control-and-tx-spell-net/llms.txt)
- [Creating Conference Badges with Text Control Reporting](https://www.textcontrol.com/blog/2017/02/14/creating-conference-badges-with-text-control-reporting/llms.txt)
- [Using Custom Document Properties to Store Additional Document Information](https://www.textcontrol.com/blog/2017/02/09/using-custom-document-properties-to-store-additional-document-information/llms.txt)
- [Use SubTextParts to Protect Document Parts](https://www.textcontrol.com/blog/2015/12/29/use-subtextparts-to-protect-document-parts/llms.txt)
- [Reporting: Styling the DocumentViewer for ASP.NET](https://www.textcontrol.com/blog/2015/06/14/reporting-styling-the-documentviewer-for-aspnet/llms.txt)
- [Reporting: Merging MS Word Documents with DocVariables](https://www.textcontrol.com/blog/2015/06/10/reporting-merging-ms-word-documents-with-docvariables/llms.txt)
- [TextControl.Web: Determine when a Document Has Been Completely Loaded](https://www.textcontrol.com/blog/2015/06/09/textcontrolweb-determine-when-a-document-has-been-completely-loaded/llms.txt)
- [TextControl.Web: Adding Custom Ribbon Tabs](https://www.textcontrol.com/blog/2015/05/29/textcontrolweb-adding-custom-ribbon-tabs/llms.txt)
- [Building a Touch-enabled Button Bar with Javascript](https://www.textcontrol.com/blog/2015/05/27/building-a-touch-enabled-button-bar-with-javascript/llms.txt)
- [TextControl.Web: Inserting Merge Fields Using Javascript](https://www.textcontrol.com/blog/2015/05/16/textcontrolweb-inserting-merge-fields-using-javascript/llms.txt)
- [MailMerge: Merge Hyperlinks into Merge Fields](https://www.textcontrol.com/blog/2015/05/15/mailmerge-merge-hyperlinks-into-merge-fields/llms.txt)
- [Mail Merge: Suppress Lines with Empty Merge Fields](https://www.textcontrol.com/blog/2014/08/01/mail-merge-suppress-lines-with-empty-merge-fields/llms.txt)
- [Interactive Spelling Suggestions Using TX Spell .NET](https://www.textcontrol.com/blog/2014/07/30/interactive-spelling-suggestions-using-tx-spell-net/llms.txt)
- [Alternate Row Colors Using NEXT Fields](https://www.textcontrol.com/blog/2013/12/30/alternate-row-colors-using-next-fields/llms.txt)
- [Loading Dictionaries Dynamically in TX Spell .NET](https://www.textcontrol.com/blog/2013/12/20/loading-dictionaries-dynamically-in-tx-spell-net/llms.txt)
- [Restart the Page Numbering Fields Per Section](https://www.textcontrol.com/blog/2013/11/08/restart-the-page-numbering-fields-per-section/llms.txt)
- [TX Barcode .NET: Test the Barcode Engine Live!](https://www.textcontrol.com/blog/2013/07/10/tx-barcode-net-test-the-barcode-engine-live/llms.txt)
- [SD Times .NET Component Buyers Guide 2013: Simplify Report Creation](https://www.textcontrol.com/blog/2013/06/06/sd-times-net-component-buyers-guide-2013-simplify-report-creation/llms.txt)
- [Inserting MS Word Compatible Page Number Fields](https://www.textcontrol.com/blog/2013/05/30/inserting-ms-word-compatible-page-number-fields/llms.txt)
- [MailMerge: Creating Shipping Labels Using TX Text Control](https://www.textcontrol.com/blog/2012/11/23/mailmerge-creating-shipping-labels-using-tx-text-control/llms.txt)
