2013-06-03 51 views
1

我在尝试构建一个表单,使用户能够更改多行的值,然后单击“提交”。我能够从数据库中检索行并将其显示在表中。但是,而不是一个文本框。我想让他们成为下拉列表。Yii将CHtml :: listData嵌入到CGrid中

$list包含我想为每行的下拉列表显示的选项。

我错过了什么?

<div class="row bottom"> 
     <?php 
      $list = CHtml::listData(Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName');  
      print_r($list); 

      $this->widget('zii.widgets.grid.CGridView', array(
       'dataProvider'=> $model->search(), 
       'columns'=>array(
       'CalendarDate', 
       'GradeName', 
       array(
       'value'=>'$data->TeacherFirstName . " " . $data->TeacherLastname', 
       'header'=>'Teacher' 
      ), 
       array(
       'value'=>'$data->FirstName . " " . $data->LastName', 
       'header'=>'Student' 
      ), 
       array(
       'value'=>$list, 
       'type'=>'raw', 
       'header'=>'Status' 
      ), 

      ), 

      )); 

     ?> 
    </div> 

当前错误消息。

PHP warning 

call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two members 

C:\wamp\www\yii\framework\base\CComponent.php(611) 

599  * @since 1.1.0 
600  */ 
601  public function evaluateExpression($_expression_,$_data_=array()) 
602  { 
603   if(is_string($_expression_)) 
604   { 
605    extract($_data_); 
606    return eval('return '.$_expression_.';'); 
607   } 
608   else 
609   { 
610    $_data_[]=$this; 
611    return call_user_func_array($_expression_, $_data_); 
612   } 
613  } 
614 } 
615 
616 
+0

Yii错误消息通常有一个调用堆栈。你有可能将错误信息缩小到代码中的一行? – AlexLordThorsen

回答

1

尝试在你的cgridview这样

array('header'=>'Action', 
    'type'=>'raw', 
    'value'=>"CHtml::dropDownlist('actionList','', CHtml::listData(
      Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName'),array())" 
     ), 
2

只需添加到以前的答案。如果你想使用外部变量,你需要在CC列中定义它。 所以你的代码看起来像:

$list = CHtml::listData(Attendancetype::model()->findAll(), 'AttendanceTypeID', 'AttendanceTypeName'); 
$this->widget('zii.widgets.grid.CGridView', array(
       'dataProvider'=> $model->search(), 
       'columns'=>array(
.... 
array('header'=>'Action', 
    'type'=>'raw', 
    'value'=> function ($data,$row) use $list {return CHtml::dropDownlist('actionList','', $list,array());} 
     ), 

这将工作,如你所需。与Ninad的答案一样。 Cgridview是最灵活的yii小部件,并有很多wiki的例子。