如何使用Yii CGridView以两行显示单个记录?

如何使用Yii CGridView以两行显示单个记录?,yii,frameworks,Yii,Frameworks,我在Yii中使用CGridView,如何在两行中显示一条记录 基本上,我想在表的第一行显示一条记录的详细信息,在另一行我想显示它的摘要,我用div和css尝试了一下,但没有得到正确的结果,在这种情况下有人可以帮助我吗 我是这样使用的: <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'bidding-grid', 'itemsCssClass' => 'data-default', 'dat

我在Yii中使用CGridView,如何在两行中显示一条记录

基本上,我想在表的第一行显示一条记录的详细信息,在另一行我想显示它的摘要,我用div和css尝试了一下,但没有得到正确的结果,在这种情况下有人可以帮助我吗

我是这样使用的:

<?php 

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bidding-grid',
'itemsCssClass' => 'data-default',
'dataProvider'=>$model,
'summaryText' => '',
'columns'=>array(
    'people_detail_for_bid.Person' => array(
                        'type'=>'raw',
                        'name'=>'people_detail_for_bid.Person',
                        'value'=>'Yii::app()->Controller->createUserNameLink($data->people_detail_for_bid->PeopleFirstName." ".$data->people_detail_for_bid->PeopleLastName, $data->people_detail_for_bid->PeopleId).
                        "<br><span class=decriptionText>".$data->people_detail_for_bid->PeopleDesignation."</span>".
                        "<br><span class=decriptionText>".$data->people_detail_for_bid->PeopleEmail."</span>"',
                        'htmlOptions'=>array('width'=>200),
    ),
    'timeAgo' => array(
                        'type'=>'raw',
                        'name'=>'timeAgo',
                        'value'=>'"<span class=decriptionText>".Yii::app()->Controller->_ago($data->PBPostedOn)."</sapn>"',
                        'htmlOptions'=>array('width'=>150),
    ),

),

)); 

?>
/**
 * Renders a table body row.
 * @param integer $row the row number (zero-based).
 */
public function renderTableRow($row)
{
    if($this->rowCssClassExpression!==null)
    {
        $data=$this->dataProvider->data[$row];
        echo '<tr class="'.$this->evaluateExpression($this->rowCssClassExpression,array('row'=>$row,'data'=>$data)).'">';
    }
    else if(is_array($this->rowCssClass) && ($n=count($this->rowCssClass))>0)
        echo '<tr class="'.$this->rowCssClass[$row%$n].'">';
    else
        echo '<tr>';

    $colCtr = 0;
    foreach($this->columns as $column){
        $column->renderDataCell($row);
        $colCtr++;
    }

    echo "</tr>\n";
    echo "<tr><td colspan=\"$colCtr\">This is the summary row. </td></tr>";
}

您可以自定义在列中呈现的内容,因此,如果要在同一行中显示表的两个不同字段,则必须在模型中创建一个函数:

public function customColumn()
{
    return $this->PeopleDesignation.'<br/>'.$this->PeopleEmail;
}

干杯,巴勃罗。

听起来像是两个交错的
cgridview
。所以你可以试一下,但我无法想象它会成功:

将一个
CGridView
覆盖在另一个上,每行中有足够的透明空间供另一行显示,然后

a. one `CGridView` table offset vertically by half a row height, *OR*
b. one table's row's text vertically top-aligned & the other bottom-aligned

但不知何故,我怀疑这是一种
CGridView
功能;)保持两者同步,这样它们就可以一起翻页和滚动,这几乎是不可能的。听起来您需要增强CGridView或从
CGridView
派生一个新的小部件。我想知道JQuery是否与此有关?

搜索太多后。。我尝试了不同的方法现在终于找到了解决办法。。这个解决方案基本上是一种第二种方法,可以做任何不实际的事情。。但这对我来说很管用

.....
.....

    'timeAgo' => array(
                        'type'=>'raw',
                        'name'=>'timeAgo',
                        'value'=>'"<span class=decriptionText>".Yii::app()->Controller->_ago($data->PBPostedOn)."</sapn></td></tr><tr><td colspan=\"6\"><span class=decriptionText>".$data->PBSummary."</span>"',
                        'htmlOptions'=>array('width'=>150),
    ),

.....
.....
。。。。。
.....
'timeAgo'=>数组(
'type'=>'raw',
'name'=>'timeAgo',
'value'=>'“”.Yii::app()->Controller->\u ago($data->PBPostedOn)。“”.$data->PBSummary。“”,
'htmlOptions'=>数组('width'=>150),
),
.....
.....
在最后一列上添加了一些表标记以关闭行,并添加了另一个表标记

希望它对所有人都有效


谢谢..

我认为实现这一点的最好和最干净的方法是创建一个新的扩展并将其扩展到CGridView,覆盖renderTableRow函数,如下所示:

<?php 

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bidding-grid',
'itemsCssClass' => 'data-default',
'dataProvider'=>$model,
'summaryText' => '',
'columns'=>array(
    'people_detail_for_bid.Person' => array(
                        'type'=>'raw',
                        'name'=>'people_detail_for_bid.Person',
                        'value'=>'Yii::app()->Controller->createUserNameLink($data->people_detail_for_bid->PeopleFirstName." ".$data->people_detail_for_bid->PeopleLastName, $data->people_detail_for_bid->PeopleId).
                        "<br><span class=decriptionText>".$data->people_detail_for_bid->PeopleDesignation."</span>".
                        "<br><span class=decriptionText>".$data->people_detail_for_bid->PeopleEmail."</span>"',
                        'htmlOptions'=>array('width'=>200),
    ),
    'timeAgo' => array(
                        'type'=>'raw',
                        'name'=>'timeAgo',
                        'value'=>'"<span class=decriptionText>".Yii::app()->Controller->_ago($data->PBPostedOn)."</sapn>"',
                        'htmlOptions'=>array('width'=>150),
    ),

),

)); 

?>
/**
 * Renders a table body row.
 * @param integer $row the row number (zero-based).
 */
public function renderTableRow($row)
{
    if($this->rowCssClassExpression!==null)
    {
        $data=$this->dataProvider->data[$row];
        echo '<tr class="'.$this->evaluateExpression($this->rowCssClassExpression,array('row'=>$row,'data'=>$data)).'">';
    }
    else if(is_array($this->rowCssClass) && ($n=count($this->rowCssClass))>0)
        echo '<tr class="'.$this->rowCssClass[$row%$n].'">';
    else
        echo '<tr>';

    $colCtr = 0;
    foreach($this->columns as $column){
        $column->renderDataCell($row);
        $colCtr++;
    }

    echo "</tr>\n";
    echo "<tr><td colspan=\"$colCtr\">This is the summary row. </td></tr>";
}
/**
*呈现一个表体行。
*@param integer$行-行号(从零开始)。
*/
公共函数renderTableRow($row)
{
if($this->rowcsslassexpression!==null)
{
$data=$this->dataProvider->data[$row];
回声';
}
如果(是_数组($this->rowCssClass)&&($n=count($this->rowCssClass))>0,则为else
回声';
其他的
回声';
$colCtr=0;
foreach($this->columns as$column){
$column->renderDataCell($row);
$colCtr++;
}
回音“\n”;
echo“这是摘要行。”;
}

问题是@Shadman需要两个自定义行,而不是两个自定义列。我想他想从多个记录中提取数据,所以CGridView需要为每对行交替指定自定义列,这可能是不可能的。是的,我需要一条记录中有两行,最后一行应该包含该记录的摘要,这必须涵盖所有列。。如1A 1B 1C 2A 2B 2C