private void initTableColumns() {
        addEnabledColumn();

        // Expression.
        dataGrid.addAutoResizableColumn(
                DataGridUtil.textColumnBuilder((ConditionalFormattingRule rule) -> rule.getExpression().toString())
                        .enabledWhen(ConditionalFormattingRule::isEnabled)
                        .build(),
                DataGridUtil.headingBuilder("Expression")
                        .withToolTip("Rows matching this expression will be formatted by this rule.")
                        .build(),
                200);
        // Style.
        // Had to put this here as GWT wasn't happy. I think it sometimes gets confused if generic types aren't
        // explicitly declared.
        final Function<ConditionalFormattingRule, SafeHtml> function = ConditionalFormattingSwatchUtil::createTableCell;
        dataGrid.addColumn(DataGridUtil.htmlColumnBuilder(function)
                        .enabledWhen(ConditionalFormattingRule::isEnabled)
                        .build(),
                DataGridUtil.headingBuilder("Style")
                        .withToolTip("The style of matching rows.")
                        .build(),
                200);
        // Hide.
        addHideColumn();

        dataGrid.addEndColumn(new EndColumn<>());
    }
Add the columns to the table.
stroom-core-client/src/main/java/stroom/dashboard/client/table/cf/RuleListPresenter.java