private function getRowString()
    {
        $columns = $this->parent->getVisibleColumns();

        ob_start();

        // properties of the dynamic tr's are set in javascript
        $tr_tag = new SwatHtmlTag('tr');
        $tr_tag->open();

        foreach ($columns as $column) {
            $td_attributes = $column->getTdAttributes();

            $td_tag = new SwatHtmlTag('td', $td_attributes);
            $td_tag->open();

            $suffix = '_' . $this->getId() . '_%s';

            if (isset($this->input_cells[$column->id])) {
                $widget = $this->input_cells[$column->id]->getPrototypeWidget();
                $widget = $widget->copy($suffix);
                $widget->parent = $this->getForm(); // so display will work.
                $widget->display();
                unset($widget);
            } else {
                echo '&nbsp;';
            }

            $td_tag->close();
        }
        $tr_tag->close();

        return ob_get_clean();
    }