2014-02-11 31 views
0

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

请张贴数据库表的结构。 –

+0

检查这里的解决方案http://stackoverflow.com/questions/12292784/yii-how-to-ajax-update-the-cgridview – dev1234

+0

@jailedabroad以及架构是相同的文章中指定的列 – Maxx

回答

0

代码在您按一下按钮,尝试这样做。

$.fn.yiiGridView.update("<id of CGridView>"); 
+0

是的,但这只能刷新网格。列的排序仍然不起作用。 – Maxx

+0

请问您可以发布searchProductNewsSymbol()方法的代码。 – dev1234

+0

当然检查我的帖子上面 – Maxx