public final void replaceAllRows(AbstractCellTable<?> table, TableSectionElement section,
                                         SafeHtml html) {
            // If the widget is not attached, attach an event listener so we can catch
            // synchronous load events from cached images.
            if (!table.isAttached()) {
                DOM.setEventListener(table.getElement(), table);
            }

            // Remove the section from the tbody.
            Element parent = section.getParentElement();
            Element nextSection = section.getNextSiblingElement();
            detachSectionElement(section);

            // Render the html.
            replaceAllRowsImpl(table, section, html);

            /*
             * Reattach the section. If next section is null, the section will be
             * appended instead.
             */
            reattachSectionElement(parent, section, nextSection);

            // Detach the event listener.
            if (!table.isAttached()) {
                DOM.setEventListener(table.getElement(), null);
            }
        }
Render a table section in the table.

@param table   the {@link AbstractCellTable}
@param section the {@link TableSectionElement} to replace
@param html    the html of a table section element containing the rows
stroom-core-client-widget/src/main/java/com/google/gwt/user/cellview/client/AbstractCellTable.java