neo*_*yte 6 sql-server sorting gridview dynamic-sql yii
我使用CSqlDataProvider从动态SQL查询中显示CGridView中的数据.有一些静态和一些动态列.现在我想在动态列中做一些像货币这样的特殊格式.但是,如果在执行查询之前我不知道列的数量/名称,我该怎么做呢.
此外,我希望能够对动态列进行排序,并且我有同样的问题,我没有所有的列名称.
在使用动态查询和gridview之前的任何人.请指点我正确的方向或提出一些想法如何做到这一点.
简而言之,我能够在gridview(也是动态行)中成功显示数据并对所有静态列进行排序.只需要对动态行进行排序并格式化动态和静态列
GridView的代码:
$tdata=$dataProvider->getData();
//Calculation to get column names
$grid_columns = array_keys($tdata[0]);
foreach($grid_columns as $i=>$ii)
{
//Applying Formula to get Total Row
$grid_final[$i] = array('name'=>$ii,'class'=>'bootstrap.widgets.TbTotalSumColumn');
}
//Grid View
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
'sortableRows'=>true,
'afterSortableUpdate' => 'js:function(id, position){ console.log("id: "+id+", position:"+position);}',
'dataProvider'=>$dataProvider,
'type'=>'striped bordered',
'template' => "{items}\n{extendedSummary}",
'columns'=> $grid_final,
));
Run Code Online (Sandbox Code Playgroud)
控制器代码:
public function actionIndex()
{
if(isset($_GET['month']))
{
$month=$_GET['month'];
}
else
{
$month= 7;
}
//SQL Query with Dynamic Columns
$sql = "SELECt ABC,X,Y,Z, @Column_Names
FROM some_table
WHERE [month] = :month";
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$command->bindParam(':month',$month,PDO::PARAM_STR);
$dataProvider=new CSqlDataProvider($sql,array('keyField' => 'ABC','params' => array(
':month' => $month,
),'sort' => array(
//Here how do i put column names which i don't know yet for sorting
'attributes' => array(
'ABC','X','Y','Z' )),'pagination'=>false));
$this->render('index',array('dataProvider' => $dataProvider, 'month' => $month));
}
Run Code Online (Sandbox Code Playgroud)
我在 Yii 中创建动态列,如下所示:
在 some_table 模型中,我们将其命名为 SomeTable,我声明最大数量的列名,如下所示:
公共$column1,$column2,$column3,$column4;
我在该模型中创建一个函数,我们将其命名为“search()”来构建 dataProvider,就像您的逻辑状态一样,但我确保 @Column_Names 看起来像这样:
var_column1 作为column1,var_column2 作为column2,等等。
这里唯一的缺点是您需要知道最大列数,当然,如果您有包含分配列的表,则声明变量分配是一个大问题。