1

我正在尝试向标签添加一个类,以便我可以控制它的属性,特别是宽度。

这是生成的 HTML 的样子,其中类为空。

替代文字 http://img651.imageshack.us/img651/7121/screenshot211201054338p.png 替代文字 http://img515.imageshack.us/img515/1553/screenshot211201055524p.png

正如你所看到的,有几个标签我希望能够分配一个类,以便我可以从外部 css 文件中进行样式设置,而不是像下面那样在控制器中进行。谢谢。

    // Add Target Data Grid

    $this->dtgTargets = new QDataGrid($this);
    $this->dtgTargets->CellPadding = 5;
    $this->dtgTargets->CellSpacing = 5;
    $this->dtgTargets->UseAjax = true;
    $this->dtgTargets->AddColumn(new QDataGridColumn("Del", '<?= $_FORM->DeleteButton_Render($_ITEM) ?>', 'Width=10', 'HtmlEntities=false')); //add TF 11-27-08
    $this->dtgTargets->AddColumn(new QDataGridColumn('Target Account','<a href="/account_detail.php?aid=<?= str_replace(" ","_",$_ITEM->Account->Id); ?>"><?= $_ITEM->Account->Name ?></a>','HtmlEntities=false',array('OrderByClause' => QQ::OrderBy(QQN::Target()->Account->Name), 'ReverseOrderByClause' => QQ::OrderBy(QQN::Target()->Account->Name,false))));
    $this->dtgTargets->GetColumn(0)->Width = '200px';
    $this->dtgTargets->SortColumnIndex = 0;
4

1 回答 1

1

我从未使用过它,但我认为是可能的。来自 QDataGridBase.class.php:

        protected function GetHeaderRowHtml() {
        $objHeaderStyle = $this->objRowStyle->ApplyOverride($this->objHeaderRowStyle);

        $strToReturn = sprintf("  <tr %s>\r\n", $objHeaderStyle->GetAttributes());
        $intColumnIndex = 0;
        if ($this->objColumnArray) foreach ($this->objColumnArray as $objColumn) {
            if ($objColumn->OrderByClause) {                        
                // This Column is Sortable
                if ($intColumnIndex == $this->intSortColumnIndex)
                    $strName = $this->GetHeaderSortedHtml($objColumn);
                else
                    $strName = $objColumn->Name;

                $this->strActionParameter = $intColumnIndex;

                $strToReturn .= sprintf("    <th %s><a href=\"%s\" %s%s>%s</a></th>\r\n",
                    $this->objHeaderRowStyle->GetAttributes(),
                                QApplication::$RequestUri,
                    $this->GetActionAttributes(),
                    $this->objHeaderLinkStyle->GetAttributes(),
                    $strName);
            } else
                $strToReturn .= sprintf("    <th %s>%s</th>\r\n", $this->objHeaderRowStyle->GetAttributes(), $objColumn->Name);
            $intColumnIndex++;
        }
        $strToReturn .= "  </tr>\r\n";

        return $strToReturn;
    }

使用以下方法设置属性:

$this->objHeaderRowStyle->GetAttributes()

GetAttributes 在系统中所有类的基类 QBaseClass 中实现。

如果你尝试 $colMyColumn->CssClass = 'class_name'; 你只设置了 td 类:-(

在研究了代码后,我可以看到创建 th 标记时的 QDataGridBase.class.php ,样式取自描述行的 RowStyle 对象,因此是 td 标记。我认为这是一个错误,并且 QDataGrid 不完整。

或者你只是在你的视图中使用一个 html 表格,或者你必须改进 QDataGrid。

更新:

这是这样做的方法:

        $objThStyle = new QDataGridRowStyle();
    $objThStyle->CssClass = 'custom-th';
    $this->dtgArticle->HeaderRowStyle = $objThStyle;

但它并不理想,因为它适用于所有标签。QDataGridRowStyle 应该在列对象中设置,而不是在数据网格中。

这是一个明显的例子,为什么我不喜欢 Qcodo 呈现 HTML、CSS 和 JavaScript 的方式。一切都是必须在控制器中设置的对象。在视图中你能做的很少。想象一下以这种方式在视图中设置类是多么简单:

<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<th>...</th>
于 2010-02-15T14:47:57.113 回答