2014-02-11 32 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