Ich habe das Problem, dass ich die notwendigen Werte nicht in das Feld für die Checkbox meines GridViews bringen kann. Das Kontrollkästchen kann aktiviert oder deaktiviert werden. Daher gibt es in der Datenbank ein boolesches Feld namens member, für DataGrid-Werte mit 0 ist nicht überprüft und 1 ist überprüft.
Normalerweise hat die Gridview vier Spalten. Zu Testzwecken drucke ich die Spalte 'member' der Datenbanktabelle in ein extra Feld vor der Checkbox-Spalte, um zu sehen, ob die Werte der Tabellenspalte 'member' richtig sind.
Da die Sicht zwei verschiedene DataProvdider hat, $ dataProvider und $ dataProviderMembers, kann ich das $ model-Objekt nicht verwenden. Das $ model-Objekt gehört zum Inhalt von $ dataProvider. Das dataviewgrid wird vom zweiten Datenprovider $ dataProviderMembers gefüllt.
<?= GridView::widget([
'dataProvider' => $dataProviderMembers,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'firstname',
'lastname',
'member',
['class' => 'yii\grid\CheckboxColumn', 'checkboxOptions' => function($model, $key, $index, $column){
return ['checked' => 'member'];
}, 'header' => 'Mitglied'
],
]
]); ?>
Controller-Methode:
$searchModel = new PeriodeClassSubjectMembersSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$modelPeriodeClassSubjectMembers = new PeriodeClassSubjectMembers();
$dataProviderMembers = $modelPeriodeClassSubjectMembers->getPeriodeClassMembers($class_id, $periode_id, false);
$dataProviderMembers->key = 'id'; //set this to make the id column as value columns in the gridview for javascript getselectedrows instead of the gridrow number
return $this->render('viewmysubject', [
'model' => $this->findModel($id),
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'dataProviderMembers' => $dataProviderMembers
]);
Modell Methode für $ dataProviderMembers:
$query = new Query();
$query->select(..........);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
return $dataProvider;
Bei dieser Methode wird das Kontrollkästchen Feld correkt nicht gefüllt.
Normale die Checkbox Feld wird durch das Segment
return ['checked' => $model->member};
In diesem Fall gefüllt werden gibt es keine $ Modell mit Werten für Mitglied. $ model gehört zu den Daten von $ dataProvider.
Aber ich bekomme die Werte für Mitglied aus $ dataProviderMembers. Wie ich in der Spalte 'member' sehen kann, die vor dem Checkbox-Feld des Datagrids ist, werden die Werte aus der Datenbank rechts in das Grid gefüllt. Wie kann ich das Checkbox-Feld ohne $ model füllen, stattdessen mit Werten der Spalte 'member' (Member-Werte von $ dataProviderMembers) der SQL-Abfrage dahinter? Was bedeutet, so etwas wie:
return ['checked' => 'member'];
wenn Iam $ modell- mit> m ember an dieser Position, die in normalen Fällen funktioniert, bekomme ich eine yii \ base \ ErrorException mit 'Versuch, Eigenschaft von Nicht-Objekt zu bekommen'. – Perino
Sind Sie sicher, dass Ihr dataProvider $ dataProviderMembers ist und wirklich das Attribut member enthält .. versuchen Sie bitte, den Controller Action Code hinzuzufügen. – scaisEdge
Ja, dataggridview wird von den $ dataProviderMembers korrekt gefüllt. Ich kann auch die richtigen Member-Werte in der zusätzlichen Spalte 'member' sehen, die ich zu Testzwecken erstellt habe (die Spalte vor der Checkbox-Spalte), ich habe jetzt auch den Hauptteil der Controller-Funktion hinzugefügt. – Perino