在Yii2中以表单形式筛选gridview

在Yii2中以表单形式筛选gridview,yii2,Yii2,我想在表单中使用gridview。其思想是将gridview中的多个选定行插入表中。我已经设法在表单中获得gridview。但是当我过滤它时,它运行insert命令而不是过滤 另外,如果有更好的方法,请告诉我。 我的表格代码 <?php use yii\helpers\Html; use yii\widgets\ActiveForm; use kartik\grid\GridView; use dosamigos\datepicker\DatePicker; use kartik\sel

我想在表单中使用gridview。其思想是将gridview中的多个选定行插入表中。我已经设法在表单中获得gridview。但是当我过滤它时,它运行insert命令而不是过滤

另外,如果有更好的方法,请告诉我。 我的表格代码

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use kartik\grid\GridView;
use dosamigos\datepicker\DatePicker;
use kartik\select2\Select2;
use yii\helpers\ArrayHelper;
use frontend\models\Rmtemplate;

/* @var $this yii\web\View */
/* @var $model frontend\models\Rawmaterial */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="rawmaterial-form">

    <?php $form = ActiveForm::begin(); ?>
    <div class="form-group">
        <div class="col-xs-3 col-sm-3 col-lg-3">
            <?= $form->field($model, 'usedate')->widget(
                DatePicker::className(), [
                // inline too, not bad
                 'inline' => false, 
                 // modify template for custom rendering
                //'template' => '<div class="well well-sm" style="background-color: #fff; width:250px">{input}</div>',
                'clientOptions' => [
                    'autoclose' => true,
                    'todayHighlight' => true,
                    'format' => 'yyyy-mm-dd'
                ]
            ]);?>
        </div>
        <div class="col-xs-9 col-sm-9 col-lg-9">
            <?= $form->field($model, 'productname')->widget(Select2::classname(), [
                'data' => ArrayHelper::map(Rmtemplate::find()->select('productname')->distinct()->orderBy(['productname' => SORT_ASC,])->all(),'productname','productname'),
                'language' => 'en',
                'options' => ['placeholder' => 'Select Charge...', 'id' => 'productid'],
                'pluginOptions' => [
                    'allowClear' => true
                ],
            ]); ?>
        </div>
        <div class="col-xs-12 col-sm-12 col-lg-12">
            <?= GridView::widget([
            'dataProvider' => $dataProvider2,
            'filterModel' => $searchModel2,
            'columns' => [
                ['class' => 'kartik\grid\CheckboxColumn'],

                //'id',
                //'productname',
                [
                'attribute'=>'productname',
                'filterType'=>GridView::FILTER_SELECT2,
                'filter'=>ArrayHelper::map(Rmtemplate::find()->orderBy(['productname' => SORT_ASC])->asArray()->all(), 'productname', 'productname'),
                'filterWidgetOptions'=>[
                'pluginOptions'=>['allowClear'=>true],
                                    ],
                'filterInputOptions'=>['placeholder'=>'Charge Name'],
            ],
                'rmname',
                'qty',

                //['class' => 'yii\grid\ActionColumn'],
            ],
        ]); ?>
        </div>
    </div>  



    <?= $form->field($model, 'rmname')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'useqty')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'unitcost')->textInput(['maxlength' => true]) ?>



    <?= $form->field($model, 'chargenumber')->textInput()->hiddenInput()->label(false) ?>



    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

<?php
/* start getting the chargeno */
$script = <<<EOD
  $(window).load(function(){
  $.get('index.php?r=rmprod/rawmaterial/get-for-chargeno',{ orderid : 1 }, function(data){
      //alert(data);
      var data = $.parseJSON(data);
      $('#rawmaterial-chargenumber').attr('value',data.chargeno);
  }
  );
});
EOD;
$this->registerJs($script);
/*end getting the chargeno */
?>
create.php的代码

<?php

use yii\helpers\Html;


/* @var $this yii\web\View */
/* @var $model frontend\models\Rawmaterial */

$this->title = 'New Charge';
$this->params['breadcrumbs'][] = ['label' => 'Rawmaterials', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="rawmaterial-create">

    <h1><?= Html::encode($this->title) ?></h1>

    <?= $this->render('_form', [
        'model' => $model,
        'searchModel2' => $searchModel2,
        'dataProvider2' => $dataProvider2,
    ]) ?>

</div>
错误:

更新2

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if (!$request->isAjax) { 

        if ($_POST('submit')  == 'create_update' )  {
        // then perform the insert 
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
            } else {
                return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
            }
        }
        }  else {
             // no insert  but render for filter ..
            return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
        }

    }
错误

更新3

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if (isset($_POST('submit'))) { 

        if ($_POST('submit')  == 'create_update' )  {
        // then perform the insert 
            if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
            } else {
                return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
            }
        }
        }  else {
             // no insert  but render for filter ..
            return $this->render('create', [
                    'model' => $model,
                    'searchModel2' => $searchModel2,
                    'dataProvider2' => $dataProvider2,
                ]);
        }

    }
错误 更新4

public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if (isset($_POST['submit'])) { 

            if ($_POST('submit')  == 'create_update' )  {
            // then perform the insert 
                if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect(['view', 'id' => $model->id]);
                } else {
                    return $this->render('create', [
                        'model' => $model,
                        'searchModel2' => $searchModel2,
                        'dataProvider2' => $dataProvider2,
                    ]);
                }
            }
            }  else {
                 // no insert  but render for filter ..
                return $this->render('create', [
                        'model' => $model,
                        'searchModel2' => $searchModel2,
                        'dataProvider2' => $dataProvider2,
                    ]);
            }


    }

这可能与提交筛选器值以执行搜索有关。
通过向“提交”按钮添加值,可以覆盖此行为

<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', 
      ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary',
    'name' => 'submit', 'value' => 'create_update']) ?>

您好,scaisEdge,我已经尝试了解决方案,但不确定如何在控制器操作中使用if语句。我在问题中添加了我的现状和错误。@Tanmay Hi。。。我已更改我的答案,检查isAjax是否。。测试前$\u POST。。因为可能是在这种情况下,$\u POST在@scaisEdge Hi.无效。我现在得到一个未定义的变量错误。已将其添加到问题中的操作创建代码中。我是否正确使用了if语句?已使用。它给出了前面的错误——“函数名必须是字符串”我已经更新了当前的代码和问题中的错误。请看一看。
public function actionCreate()
    {
        $model = new Rawmaterial();
        $searchModel2 = new RmtemplateSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);

        if (isset($_POST['submit'])) { 

            if ($_POST('submit')  == 'create_update' )  {
            // then perform the insert 
                if ($model->load(Yii::$app->request->post()) && $model->save()) {
                return $this->redirect(['view', 'id' => $model->id]);
                } else {
                    return $this->render('create', [
                        'model' => $model,
                        'searchModel2' => $searchModel2,
                        'dataProvider2' => $dataProvider2,
                    ]);
                }
            }
            }  else {
                 // no insert  but render for filter ..
                return $this->render('create', [
                        'model' => $model,
                        'searchModel2' => $searchModel2,
                        'dataProvider2' => $dataProvider2,
                    ]);
            }


    }
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', 
      ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary',
    'name' => 'submit', 'value' => 'create_update']) ?>
if (isset($_POST['submit'])) { 

    if ($_POST['submit']  == 'create_update' )  {
          // then perform the insert 
      }   else {
         // no insert  but render for filter ..
}