2017-03-09 49 views
0

我正在使用Yii2 kartik gridview。以下是點擊toggleData按鈕前後的2張圖片。我無法在gridview中看到完整的數據。Kartik GridView Yii2:切換數據在工具欄中不起作用

enter image description here

enter image description here

只有分頁會消失,但GridView控件不顯示所有記錄。我現在有10條記錄,我已將分頁設置爲5條記錄。所以,如果我點擊「全部」,我必須得到所有10條記錄,但正如你所看到的,我只能得到5條記錄。

以下是渲染頁面之前的ActiveDataProvider的代碼。

代碼中的控制器動作

$searchModel = new StudentsAdminSearch(); 
     $dataProvider = $searchModel->search(\Yii::$app->request->queryParams); 
     return \Yii::$app->controller->render('student/student_list', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 

代碼中StudentAdminSearch

$dataProvider = new ActiveDataProvider([ 
      'pagination' => [ 
       'pageSize' => Constants::$PAGE_SIZE, // $PAGE_SIZE=5 
      ], 
      'query' => $query, 
     ]); 

回答

0

我做了別的,比會話變量更容易和更可靠。

如果你看到,當我列表頁上的第一個土地我得到的地址欄像鏈接

http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list 

當我點擊「ALL」卡爾蒂克GridView控件內按鈕切換按鈕,我得到一個鏈接在地址欄一樣,

http://localhost/nse/backend/web/index.php?r=site%2Fstudent-list&_tog1149016d=all 

如果你仔細看,我得到額外的參數添加爲_ tog1149016d,值爲「全部」。對於不同的安裝ans服務器,帶'_tog'的數字會發生變化。因此,內部搜索模式的搜索方法,我做了這樣的事情,

$pagination = Utility::getPagination($params); 

    $dataProvider = new ActiveDataProvider([ 
     'pagination' => $pagination, 
     'query' => $query, 
    ]); 

我寫了一個小工具功能檢查要求PARAM它是否包含「所有」或「網頁」或沒有。

public static function getPagination($request_params){ 
    $param_val = 'page'; 
    foreach($request_params as $key => $value){ 
     if (strpos($key, '_tog') !== false) { 
      $param_val = $value; 
     } 
    } 
    $pagination = array(); 
    if($param_val == 'all'){ //returns empty array, which will show all data. 
     return $pagination; 
    }else if($param_val == 'page'){ //return pageSize as 5 
     $pagination = ['pageSize' => 5]; 
     return $pagination; 
    } 
    return $pagination; // returns empty array again. 
} 

上面的代碼像魅力一樣工作。我附上實現的證明及以下運行的情況下,

在單擊「頁面」(它使分頁,我的情況下,5)

enter image description here

在單擊「全部」 (它填充所有數據)

enter image description here

1

爲活動的數據提供者是有限制,只顯示5限,每次獲取時間,這是不變的數據你只會得到5條記錄,所以你可以使用yii2會話來設置點擊切換的數據這樣的一些事情

$size=\Yii::$app->session->get('user.size'); 
    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
     'pagination' => [ 
      'pageSize' => isset($size) ? $size : 5, 
     ], 
     'sort' => [ 
      'defaultOrder' => [ 
       'id' => SORT_DESC, 
      ] 
     ], 
    ]); 

其中user.size是會話值要或u還可以刪除分頁大小來獲取所有數據,如果大小是不是有

$notshowsize=\Yii::$app->session->get('user.size'); 
    $pagination = array(); 
if($notshowsize){ 
$pagination = array(); 
}else{ 
    $pagination = ['pageSize' => isset($size) ? $size : 5] 
} 
$dataProvider = new ActiveDataProvider([ 
    'query' => $query, 
    'pagination' => $pagination, 
    'sort' => [ 
     'defaultOrder' => [ 
      'id' => SORT_DESC, 
     ] 
    ], 
]); 

其中變量$ notshowsize是布爾設置爲顯示數據分頁與否

+0

如何在切換按鈕編寫代碼??我的意思是'toolbar'=> [ '{toggleData}', '{export}' ]那麼我需要在上面的代碼中只寫入toggledata? –