Telerik Forums
Kendo UI for Angular Forum
1 answer
34 views

Hello!

I'm working with a grid that contains several Kendo dropdown lists. The data for these dropdowns relies on certain values within the grid, which can vary for each row. Currently, the dataset from the last row is being applied to all dropdowns in previous rows. How can I ensure that each dropdown in a row uses its own unique dataset based on the values specific to that row?

Thanks,

Balazs

 

UPDATE:

The functionality is operating correctly as intended. The issue only occurred on my end.
Martin Bechev
Telerik team
 answered on 23 Feb 2024
1 answer
22 views
I have been trying to use kendo-dropdown-list and kendo-grid in the same page. If I change the styles of k-picker-solid along with dropdown list, filter icon template is also getting affected. 
Zornitsa
Telerik team
 answered on 20 Feb 2024
2 answers
44 views

Hi!

i want replace a input text with a dropdownlist-filter inside this default filter, i need to keep this filter: CONTAINS ... - AND / OR - CONTAINS ...

Can someone help me?

Thanks!! 

Andrea
Top achievements
Rank 1
Iron
 answered on 10 Jan 2024
0 answers
25 views
hi, I have a column with multiple object values ​​and I need to bind each id to default filter menu but kendo only allows me to bind an unique id via input (fieldName).
Is there a way to send multiple ids? or i have to create a custom component and add my logic there
marc
Top achievements
Rank 1
 asked on 09 Jan 2024
2 answers
40 views

Hey everyone, 

Hope this message finds you well. 

I'm creating a grid table with Add/Edit/Delete features. Currently running into a blocker when clicking on a checkbox during an Add procedure. This action completely resets the values from the dropdown menus I've previously selected from. Any ideas as to why this behavior might be occurring? Thanks! 

TS: 

import { Component, OnInit } from '@angular/core';
import { DataService } from '../../services/other_api/DataService';
import { ErrorHandlerService } from '../../services/error-handler.service';
import { Item } from '../../models/other_api/Item';
import { FormBuilder, FormGroup } from '@angular/forms';
import { SortDescriptor } from "@progress/kendo-data-query";
import { RemoveEvent, SaveEvent } from '@progress/kendo-angular-grid';
import { AnotherService } from '../../services/other_api/AnotherService';
import { DifferentService } from '../../services/other_api/DifferentService';
import { SomeService } from '../../services/other_api/SomeService';

@Component({
  selector: 'app-client',
  templateUrl: './client.component.html',
  styleUrls: ['./client.component.scss'],
})
export class ClientComponent implements OnInit {
  clients: Item[] = [];
  anotherItems: string[] = [];
  differentItems: string[] = [];
  someItems: string[] = [];
  moreItems: string[] = [];
  parentItems: string[] = [];

  constructor(
    private errorHandlerService: ErrorHandlerService,
    private dataService: DataService,
    private anotherService: AnotherService,
    private differentService: DifferentService,
    private someService: SomeService,
    private formBuilder: FormBuilder,
  ) {
    this.createFormGroup = this.createFormGroup.bind(this);
  }

  public formGroup: FormGroup = this.formBuilder.group({
    Id: 0,
    ClientName: '',
    ClientKey: '',
    ParentClientName: '',
    IsParent: false,
    MarketVertical: '',
    Region: '',
    Inactive: false,
    Locale: ''
  });

  public createFormGroup = (args: any): FormGroup => {
    const item = args.isNew ? new Item(0, '', '', '', '', '', false, false, '') : args.dataItem;

    return this.formBuilder.group({
      Id: item.Id,
      ClientName: item.ClientName,
      ClientKey: item.ClientKey,
      ParentClientName: item.ParentClientName,
      IsParent: item.IsParent || false,
      MarketVertical: item.MarketVertical,
      Region: item.Region,
      Inactive: item.Inactive || false,
      Locale: item.Locale
    });
  };

  public sort: SortDescriptor[] = [
    {
      field: "Name",
      dir: "asc",
    },
  ];

  public sortChange(sort: SortDescriptor[]): void {
    this.sort = sort;
    this.getAllClients();
    this.getAnotherItems();
    this.getDifferentItems();
    this.getSomeItems();
    this.getMoreItems();
    this.getParentItems();
  }

  ngOnInit(): void {
    this.getAllClients();
    this.getAnotherItems();
    this.getDifferentItems();
    this.getSomeItems();
    this.getMoreItems();
    this.getParentItems();
  };

  login() {
    //Implementation for login
  };

  showError() {
    this.errorHandlerService.handleError("This is a test error. Stuff is super wrong.");
  }

  getClient(): void {
    this.dataService.get(1).subscribe();
  }

  getAllClients(): void {
    this.dataService.getAll().subscribe((data) => {
      this.clients = data;
    });
  }

  getAnotherItems(): void {
    this.anotherService.getAll().subscribe((data) => {
      this.anotherItems = data.map((anotherItem) => anotherItem.Name);
    });
  }

  getDifferentItems(): void {
    this.differentService.getAll().subscribe((data) => {
      this.differentItems = data.map((differentItem) => differentItem.Description);
    });
  }

  // Similar functions for other services

  saveHandler(args: SaveEvent): void {
    if (args.isNew) {
      this.dataService.create(args.dataItem).subscribe((createdData) => {
        const updateItem = this.clients.filter(element => element.ClientName === createdData.ClientName)[0];
        updateItem.Id = createdData.Id;
      });
    }
    else {
      this.dataService.update(args.formGroup.value).subscribe((updatedData) => {
        const updateItem = this.clients.filter(element => element.Id === updatedData.Id)[0];
        updateItem.ClientName = updatedData.ClientName;
        updateItem.ClientKey = updatedData.ClientKey;
        // Similar updates for other properties
      });
    }
    args.sender.closeRow(args.rowIndex);
  }

  removeHandler(args: RemoveEvent): void {
    this.dataService.delete(args.dataItem).subscribe();
  }
}


------------------------------

HTML:

<link rel="stylesheet" href="https://unpkg.com/@progress/kendo-theme-default/dist/all.css" />
<app-page-layout [workingArea]="body" [footer]="footer">
  <ng-template #body>
    <h1>Clients</h1>
    <kendo-grid [kendoGridReactiveEditing]="createFormGroup"
                [kendoGridBinding]="clients"
                [pageable]="true"
                [sortable]="true"
                [navigable]="true"
                [filterable]="true"
                [sort]="sort"
                (sortChange)="sortChange($event)"
                [pageSize]="10"
                (save)="saveHandler($event)"
                (remove)="removeHandler($event)">
      <ng-template kendoGridToolbarTemplate>
        <button kendoGridAddCommand themeColor="success">Add</button>
      </ng-template>
      <kendo-grid-column field="ClientName" title="Client Name"> </kendo-grid-column>


      <kendo-grid-column [filterable]="false" field="ClientKey" title="Client Key">
        <ng-template kendoGridEditTemplate let-dataItem="dataItem">
          <kendo-dropdownlist [data]="clientKeys" [(ngModel)]="dataItem.ClientKey" name="ClientKey"></kendo-dropdownlist>
        </ng-template>
      </kendo-grid-column>

      <!-- Other columns-->

      <kendo-grid-column [filterable]="true" filter="boolean" field="IsParent" title="Is Parent" editor="boolean">
        <ng-template kendoGridCellTemplate let-dataItem="dataItem">
          <input kendoCheckBox id="isParentCheckbox" type="checkbox" [checked]="dataItem.IsParent" disabled />
        </ng-template>
      </kendo-grid-column>

      <kendo-grid-column [filterable]="true" filter="boolean" field="Inactive" title="Inactive" editor="boolean">
        <ng-template kendoGridCellTemplate let-dataItem="dataItem">
          <input kendoCheckBox id="InactiveCheckbox" type="checkbox" [checked]="dataItem.Inactive" disabled />
        </ng-template>
      </kendo-grid-column>

      <kendo-grid-command-column title="Actions" [width]="220">
        <ng-template kendoGridCellTemplate let-isNew="isNew">
          <button kendoGridEditCommand themeColor="info">
            Edit
          </button>
          <button kendoGridRemoveCommand themeColor="error">Remove</button>
          <button kendoGridSaveCommand themeColor="success">
            {{ isNew ? "Add" : "Update" }}
          </button>
          <button kendoGridCancelCommand themeColor="warning">
            {{ isNew ? "Discard changes" : "Cancel" }}
          </button>
        </ng-template>
      </kendo-grid-command-column>
    </kendo-grid>
  </ng-template>

  <ng-template #footer>
    <app-custom-button [buttonText]="'Login'" aria-label="Login" (onClick)="login()"></app-custom-button>
    <app-custom-button [buttonText]="'Show Error'" aria-label="Show Error" (onClick)="showError()"></app-custom-button>
  </ng-template>
</app-page-layout>
1 answer
69 views
Hi
I have a dashboard with a grid and space is rather tight, and the user wants to see a long list of items, without covering up other parts of the grid.
Is It possible from my sample below

https://stackblitz.com/edit/angular-kggzs9?file=src%2Fapp%2Fapp.component.ts

To always have the kendo-dropdownlist popup always open just below the column header, no matter which row is being edited ?

Here's a sketch of what I'm looking for .. I want the popup to always open right below Product Name.  For PopupSettings there appears to be no "Top" attribute to accomplish this position change. 


 Using chrome dev tools, I can modify the Top attribute to 0 to achieve the desired result.

Thanks

Yanmario
Telerik team
 answered on 20 Jun 2023
1 answer
38 views

I currently have a grid with an in-cell drop down for a customer. I saw that there is set navigation control, but can you customized it.  

What I was looking for is when a user goes to edit a customer, then click the down arrow, which will commit the current customer --> go to the next record --> open up the drop down for the customer

thanks in advance

Martin Bechev
Telerik team
 answered on 24 Mar 2023
0 answers
58 views

I was following the kendo getting started tutorial. 

I'm able to add Calendar component successfully and see it in the UI. But when i tried to add Data grid using command - "ng add @progress/kendo-angular-grid" , I can add the module successfully but when i run my application its throwing error - " 'get' and 'set' accessor must have the same type. "

Same issue when i tried to add and run dropdown component..

Can anyone please help.

Thanks in advance.

Jithin
Top achievements
Rank 1
 asked on 15 Feb 2023
0 answers
170 views

Hello,

I have a problem for which I cannot find any solution. I have a Kendo grid declared in one of the components in Angular. One of the columns is an array of strings that are displayed together in the column. The filter for this column is a dropdown with possibility to select one of the stringsthat are displayed in these columns.

I'm doing server side filtering for this grid with the .ToDataSourceResult() method. The problem is that when I try to pass the string filter in state, I get (understandably because of mismatching types) an error:

'Invalid cast from 'System.String' to 'System.Collections.Generic.IEnumerable`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]'.'

I cannot find any solution for this problem - I don't know how to make it work so that I can filter an array of strings. Normally in these kind of problems we set the field as the single string with concatenated values from array. But because this particular method is working on IQueryable for better performance, it is not possible. 

Below I pass the code for reference:

The backend method:

public DataSourceResult GetAllServices(DataSourceRequest state)
        {
            var allServices = _serviceRepository.GetServices();

            IQueryable<NonDraftServiceDto> mappedAllServices = _mapper.ProjectTo<NonDraftServiceDto(allServices);

            return mappedAllServices.ToDataSourceResult(state);
        }

Model:

    public class NonDraftServiceDto
    {
        public int Id { get; set; }

        public string Service { get; set; }

        public IEnumerable<string> Sites { get; set; }
    }

 

Grid in Angular:

<kendo-grid
        [sortable]="true"
        [scrollable]="'none'"
        [selectable]="true"
        [sort]="gridState.sort"
        [data]="allServices"
        [pageSize]="gridState.take"
        [skip]="gridState.skip"
        [pageable]="true"
        [filterable]="true"
        [filter]="gridState.filter"
        (dataStateChange)="dataStateChange($event)">
        <kendo-grid-column
            [filterable]="true"
            field="Service"
            [sortable]="true"
            [title]="Service"
            [width]="157">
        </kendo-grid-column>
        <kendo-grid-column
          [filterable]="true"
          field="Sites"
          [sortable]="true"
          [title]="Sites"
          [width]="175">
          <ng-template kendoGridCellTemplate let-dataItem>
            {{dataItem.Sites}}
          </ng-template>
          <ng-template kendoGridFilterCellTemplate let-filter>
            <app-dropdown-filter #SiteDropdown
              [filter]="filter"
              [data]="dropdownSites"
              textField="DisplayName"
              valueField="DisplayName"
              filterField="Sites"
              operator="contains">
          </app-dropdown-filter>
        </ng-template>
        </kendo-grid-column>
        <kendo-grid-column
            [filterable]="true"
            field="Status"
            [sortable]="true"
            [title]="'service_overview.Status_column_name' | translate: 'Status'"
            [width]="50">
            <ng-template kendoGridCellTemplate let-dataItem>
              {{ returnStatusText(dataItem.Status) }}
            </ng-template>
            <ng-template kendoGridFilterCellTemplate let-filter>
                <app-dropdown-filter
                    [filter]="filter"
                    [data]="statusList"
                    textField="ServiceStatusText"
                    valueField="ServiceStatusText"
                    filterField="Status"
                    operator="eq">
                </app-dropdown-filter>
            </ng-template>
        </kendo-grid-column>
    </kendo-grid>
Michal
Top achievements
Rank 1
 asked on 21 Jul 2022
1 answer
62 views
Hello, I'm having trouble managing to create a custom component for a filter inside a grid. I've started based on the documentation with the DropdownList custom component (here) and I provided the correct data to it (filters and options) and every time I select an option it throws me an error (attached image). I replicated the exact example from the documentation and I'm encountering the same issue. Can anyone tell me what I'm doing wrong? I also provided the data I'm passing from the parent component (the first is the filter object, the second is data with the available options). Thanks in advance.
Martin Bechev
Telerik team
 answered on 30 Jun 2022
Top users last month
Mark
Top achievements
Rank 1
Yurii
Top achievements
Rank 1
Leland
Top achievements
Rank 2
Iron
Iron
Iron
Hon
Top achievements
Rank 1
Iron
Deltaohm
Top achievements
Rank 3
Bronze
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?