Переключение столбцов с помощью таблицы данных ngx

#angular #angular-directive #ngx-datatable

Вопрос:

Я работаю над сеткой, где я использую для нее подкачку на стороне сервера. Я хочу переключать столбцы. Когда пользователь выберет столбец из выпадающего списка, он будет удален из сетки. Он работает, но изменяет поведение сетки, как показано на изображении. Плюс есть ли способ перенести это в общий компонент, чтобы повторно использовать его в других компонентах, потому что у меня много сетки, где я должен реализовать эту функциональность. Вот мой тестовый код.

Код стороны Ts

 toggle(event) {
      let col = event.target.value
      this.cols = this.cols.filter(c => {
        return c.name !== col;
      });
    }
 

Выпадающий код на стороне Html

   <select (change)="toggle($event)" [(ngModel)]="currentCol" class="col-md-2 mr-2 mt-2  form-control">
              <option value="">-Select Column-</option>
              <option value="{{col.prop}}" *ngFor="let col of cols">
                {{ col.name }}
              </option>
        </select>
 

Html-Код Сетки

 <ngx-datatable-column [sortable]="false" [canAutoResize]="false" [draggable]="false" [resizeable]="false"
              *ngIf="!ischildGroup amp;amp; !IsPast amp;amp; IsUpcoimg amp;amp; (_LmsUserSession.Roles.includes('Admin') || _LmsUserSession.Roles.includes('Instructor') || _LmsUserSession.Roles.includes('ClassCoordinator'))">
              <ng-template ngx-datatable-header-template let-value="value" let-allRowsSelected="allRowsSelected"
                let-selectFn="selectFn">
                <input type="checkbox" [checked]="rows.totalCount > 0 amp;amp; rows.totalCount == this.selectedClasses.length"
                  (change)="selectAllRows($event)" />
                <span> All</span>
              </ng-template>
              <ng-template ngx-datatable-cell-template let-value="value" let-isSelected="isSelected"
                let-onCheckboxChangeFn="onCheckboxChangeFn" let-row="row">
                <input type="checkbox" [checked]="IsRowReselect(row.Id)" id="{{row.Id}}"
                  (change)="selectSingleRows($event)" (click)="$event.stopPropagation()" />
              </ng-template>
            </ngx-datatable-column>

            <ngx-datatable-column [resizeable]="false" [sortable]="false" name="Actions">
              <ng-template let-row="row" ngx-datatable-cell-template>
                <span
                  *ngIf="!ischildGroup amp;amp; (_LmsUserSession.Roles.includes('Instructor') || _LmsUserSession.Roles.includes('Admin') || _LmsUserSession.Roles.includes('Student') || _LmsUserSession.Roles.includes('Client') || _LmsUserSession.Roles.includes('ClassCoordinator'))">
                  <a type="button" href="javascript:void(0)" title="View Enrollments"
                    (click)="$event.stopPropagation(navigateToEnrollments(row.Id))"><i class="fa fa-users"></i></a>
                  |
                </span>
                <span>
                  <span
                    *ngIf="!_LmsUserSession.Roles.includes('Client') 
                amp;amp; ClassCompleteStatus!=row.Status amp;amp;
               (!_LmsUserSession.Roles.includes('PaperworkInstructor') || _LmsUserSession.Roles.includes('Instructor') || _LmsUserSession.Roles.includes('Admin') || _LmsUserSession.Roles.includes('ClassCoordinator'))">

                    <a type="button" href="javascript:void(0)" title="Copy Enrollment Url"
                      (click)="$event.stopPropagation(copyInviteLink(row.CourseId,row.Id))"><i
                        class="fa fa-globe"></i></a>
                    |
                  </span>


                  <span
                    *ngIf="(_LmsUserSession.Roles.includes('Admin') || _LmsUserSession.Roles.includes('Instructor') || _LmsUserSession.Roles.includes('ClassCoordinator') || _LmsUserSession.Roles.includes('PaperworkInstructor')) amp;amp; ((row.Status < PaperWorkSubmittedStatus || row.Status==ClassRejected ))">

                    <a *ngIf="!isUserExpired" title="Edit" type="button" href="javascript:void(0)"
                      (click)="$event.stopPropagation(editHandler(row.Id))"><i
                        [ngClass]="ischildGroup ? 'fa fa-eye' : 'fa fa-pencil'"></i></a>
                    <a *ngIf="isUserExpired" title="View" type="button" href="javascript:void(0)"
                      (click)="$event.stopPropagation(editHandler(row.Id))"><i class="fa fa-eye"></i></a>

                  </span>

                  <span
                    *ngIf="(_LmsUserSession.Roles.includes('Admin') || _LmsUserSession.Roles.includes('Instructor') || _LmsUserSession.Roles.includes('PaperworkInstructor') || _LmsUserSession.Roles.includes('ClassCoordinator')) amp;amp; row.Status >= PaperWorkSubmittedStatus amp;amp; row.Status!=ClassRejected ">

                    <a title="View" type="button" href="javascript:void(0)"
                      (click)="$event.stopPropagation(editHandler(row.Id))"><i class="fa fa-eye"></i></a>

                  </span>

                  <span
                    *ngIf="!ischildGroup amp;amp; (_LmsUserSession.Roles.includes('Admin') || _LmsUserSession.Roles.includes('ClassCoordinator'))">
                    |
                    <a title="Delete" type="button" href="javascript:void(0)"
                      (click)="$event.stopPropagation(deleteHandler(row.Id, row.IsEnrollmentExist))"><i
                        class="fa fa-trash-o"></i></a>
                  </span>

                </span>
              </ng-template>
            </ngx-datatable-column>
            <ngx-datatable-column [resizeable]="false" name="Date/Time" prop="Date">
              <ng-template let-row="row" ngx-datatable-cell-template>
                <span *ngIf="row.DateAndTime">{{ row.DateAndTime.Date | date }}
                  <span *ngIf="row.DateAndTime.flexibleTime" class="badge badge-pill badge-primary">Flexible Class
                    Timings</span><br>
                  <span *ngIf="!row.DateAndTime.flexibleTime" class="badge badge-pill badge-primary">
                    {{ row.StartTime | date:'shortTime' }} - {{row.EndTime | date:'shortTime' }}
                  </span><br></span>
              </ng-template>
            </ngx-datatable-column>

            <ngx-datatable-column [resizeable]="false" name="Course" prop="Course">
              <ng-template let-row="row" ngx-datatable-cell-template>
                <div [title]="row.Course">
                  {{ (row.Course.length > 50) ? (row.Course | slice:0:50)   '...' : row.Course }}
                </div>
              </ng-template>
            </ngx-datatable-column>

            <ngx-datatable-column [resizeable]="false" name="Status" prop="StatusName">
              <ng-template let-row="row" ngx-datatable-cell-template>
                <div *ngIf="GridType ==PastGridType">
                  <span *ngIf="row.Status == 0"><span class='badge badge-info'> Awaiting paperwork</span></span>
                  <span *ngIf="row.Status != 0" [innerHTML]="row.StatusName"></span>
                </div>
                <span *ngIf="GridType!=PastGridType" [innerHTML]="row.StatusName"></span>
              </ng-template>
            </ngx-datatable-column>

            <ngx-datatable-column [resizeable]="false" name="Client" prop="Client">
              <ng-template let-row="row" ngx-datatable-cell-template>
                {{ row.Client }}
              </ng-template>
            </ngx-datatable-column>

            <ngx-datatable-column [resizeable]="false" name="Loc" prop="Location">
              <ng-template let-row="row" ngx-datatable-cell-template>
                {{ row.Location }}
              </ng-template>
            </ngx-datatable-column>

            <ngx-datatable-column [resizeable]="false" name="Instructor" prop="Instructor">
              <ng-template let-row="row" ngx-datatable-cell-template>
                {{ row.Instructor }}
              </ng-template>
            </ngx-datatable-column>

            <!-- <ngx-datatable-column [resizeable]="false" name="Certificate" prop="Certificate">
          <ng-template let-row="row" ngx-datatable-cell-template>
            {{ row.Certificate }}
          </ng-template>
        </ngx-datatable-column> -->

            <ngx-datatable-column [resizeable]="false" name="Enrolled" prop="Enrolled">
              <ng-template let-row="row" ngx-datatable-cell-template>
                {{ row.Enrolled }}
              </ng-template>
            </ngx-datatable-column>

            <ngx-datatable-column [resizeable]="false" name="Seat(s) Left" prop="RemainingSeat">
              <ng-template let-row="row" ngx-datatable-cell-template>
                {{ row.RemainingSeat < 0 ? 0: row.RemainingSeat }} </ng-template>
            </ngx-datatable-column>
          </ngx-datatable>
 

Вот изображение до и после столбца переключения из него.

введите описание изображения здесь

После выбора столбца из выпадающего списка.

введите описание изображения здесь

Это то, с чем я сталкиваюсь здесь.Он удаляет столбец клиента из сетки, но изменяет представление сетки.

Комментарии:

1. У кого-нибудь есть ответ или какая-либо помощь