我面臨一個相當長時間沒有任何明確解決方案的麻煩場景。問題是我有一個顯示產品信息和5d,6m和12m投資回報的gridview,以及另一個名爲total profitable%的列。此總利潤%列是針對每個月分別計算的,並存儲在數據庫的不同列中。Yii Gridview使用Ajax更改列值
現在的事情是,如何讓這個名爲total profitable%的列顯示用戶當前正在排序的roi月的信息。因此,如果用戶在第5天的投資回報率列上排序,總盈利百分比將重新計算爲5天總盈利百分比。如果用戶在6m ROI列上排序,則總利潤率將再次重新計算爲6m,以此類推。我一直在試圖找到一種方法來實現這一點,通過將「可見」屬性設置爲false,以獲取整個月份的總利潤%列,除了用戶正在對ROI列進行排序的那個列,但它不工作所有。
這裏是有問題的gridview。
$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'product-news-grid-'. $id,
'itemsCssClass' => 'table table-striped',
'htmlOptions' => array(
'class' => 'news-datagrid',
),
'dataProvider' => $dataProvider->searchProductNewsSymbol($name, $headlines, $publish_date),
'filter' => $dataProvider,
'enableHistory' => false,
'ajaxUpdate' => 'product-news-grid-'. $id,
'ajaxUrl' => Yii::app()->createUrl('/productDetails/AjaxUpdateProductNews'),
'pager' => array(
'header' => '',
'cssFile' => false,
'maxButtonCount' => 5,
'selectedPageCssClass' => 'active',
'hiddenPageCssClass' => 'disabled',
'firstPageCssClass' => 'previous',
'lastPageCssClass' => 'next',
'firstPageLabel' => '<<',
'lastPageLabel' => '>>',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
),
'summaryCssClass' => 'label label-warning',
'columns' => array(
array(
'name' => 'name',
'header' => 'Name',
'value' => function($data) {
return '<div class="product-name"> <a target="_blank" href="'. $data->id .'" > '. $data->name .'</a></div>';
},
'type' => 'raw',
),
array(
'name' => 'headlines',
'header' => 'Headlines',
'value' => function($data) {
return '<div class="product-news"> <a target="_blank" href="'. $data->link .'" > '. $data->headlines .'</a></div>';
},
'type' => 'raw',
),
array(
'name' => 'publish_date',
'header' => 'Date',
'value' => function($data) {
return '<span class="news-pub-date">'. $data->publish_date .'</span>';
},
'type' => 'raw',
),
array(
'name' => 'fived_roi',
'header' => '5d ROI',
'value' => function($data) {
return '<span class="news-pub-date">'. $data->fived_roi .'</span>';
},
'type' => 'raw',
),
array(
'name' => 'sixm_roi',
'header' => '6m ROI',
'value' => function($data) {
return '<span class="news-pub-date">'. $data->sixm_roi .'</span>';
},
'type' => 'raw',
),
array(
'name' => 'twlm_roi',
'header' => '12m ROI',
'value' => function($data) {
return '<span class="news-pub-date">'. $data->twlm_roi .'</span>';
},
'type' => 'raw',
),
array(
'name' => 'fived_profit',
'header' => 'Total Profit %',
'value' => function($data) {
return '<span class="news-pub-date">'. $data->fived_profit .'%</span>';
},
'type' => 'raw',
),
array(
'name' => 'sixm_profit',
'header' => 'Total Profit %',
'value' => function($data) {
return '<span class="news-pub-date">'. $data->sixm_profit .'%</span>';
},
'type' => 'raw',
'visible' => false
),
array(
'name' => 'twlm_profit',
'header' => 'Total Profit %',
'value' => function($data) {
return '<span class="news-pub-date">'. $data->twlm_profit .'%</span>';
},
'type' => 'raw',
'visible' => true
),
)
));
?>
我試圖通過一個單擊處理程序連接到表列標題,和渲染它具有總利潤%列可見的人有不同的看法,使這項工作。但它不起作用,導致排序不起作用,整個網格在渲染不同的網格後崩潰。
所以,任何人都可以指出我如何達到預期的效果。我將不勝感激任何幫助。
感謝, Maxx的
編輯
這裏是searchProductNewsSymbol()
public function searchProductNewsSymbol ($name ,
$headlines = NULL ,
$publish_date = NULL) {
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria = new CDbCriteria ;
$criteria->select = 'name, publish_timestamp, publish_date, headlines, link, last_updated';
$criteria->group = 'headlines';
$criteria->compare ('name' ,
$name ,
true) ;
if (isset ($headlines) || $headlines != "") {
$criteria->compare ('headlines' ,
$headlines ,
TRUE ,
'AND') ;
}
if (isset ($publish_date) || $publish_date != "") {
$criteria->compare ('publish_date' ,
$publish_date ,
TRUE ,
'AND') ;
}
return new CActiveDataProvider ($this ,
array (
'criteria' => $criteria ,
'sort' => array (
'defaultOrder' => 'publish_date desc' ,
) ,
)) ;
}
請張貼數據庫表的結構。 –
檢查這裏的解決方案http://stackoverflow.com/questions/12292784/yii-how-to-ajax-update-the-cgridview – dev1234
@jailedabroad以及架構是相同的文章中指定的列 – Maxx