2012-03-22 42 views
2

我在Yii中使用CGridView,如何在兩行中顯示一條記錄?如何使用Yii CGridView在2行中顯示單個記錄?

基本上我想在第一行的表格和其他行上顯示記錄詳細信息,我想顯示其摘要,我試過用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), 
    ), 

), 

)); 

?> 

回答

1

經過太多的搜索..我試着用不同的方式現在終於得到了這個解決方案..該解決方案基本上是一種第二種方式做任何事情都不是實際的方式..但它對我有用..

..... 
..... 

    '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), 
    ), 

..... 
..... 

在最後一列添加了一些表標籤以關閉行並添加了另一個。

希望它適用於所有..

感謝..

1

您可以自定義你的列渲染什麼,所以如果你想展示你的表的同一行中兩個不同的領域,你必須創建一個函數模型:

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

,然後方法分配給你列的值:

array(
    'type'=>'html', 
    'value'=>'$data->customColumn()' 
), 

乾杯,巴勃羅。

+0

問題是@Shadman需要兩個自定義行,而不是2個自定義列。我想他想從多條記錄中拉出來,所以CGridView需要爲每對行交替使用customColumn賦值,這可能是不可能的。 – hobs 2012-03-23 02:38:07

+0

你好,我需要2行記錄,最後一行應該包含該記錄的摘要,並且必須包含所有列。像

​​1A ​​1B 1C ​​2A ​​2B
2C
2012-03-25 11:39:34

0

聲音像2交錯CGridViews。所以,你可以嘗試,但我無法想象它會進行得很順利:

覆蓋一個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能力;)並保持兩個同步,所以他們pagenate和捲起來將是幾乎不可能的事。聽起來像你需要增強CGridView或從CGridView派生一個新的部件。我不知道JQuery是否有這樣做?

5

我想做到這一點的最好和最乾淨的方法是創建一個新的延伸和擴展到CGridView,覆蓋這樣的renderTableRow功能:

/** 
* 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>"; 
} 
+0

不錯的一個..反抗我會試試這個..很多謝謝你的幫助.. – 2012-03-26 06:28:23

相關問題