我面临一个相当长时间没有任何明确解决方案的麻烦场景。问题是我有一个显示产品信息和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