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;

ただし、al th タグに適用されるため、理想的ではありません。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 に答える