Unplanned
Last Updated: 28 Sep 2021 11:03 by ADMIN
Created by: Jeffrey
Comments: 2
Category: Grid
Type: Feature Request
5

 

 

Grid - Import from Clipboard (Excel) when column name matches the first row header

 

I think it would be a great feature to be able to import copied data from excel into the grid either based on the index of the column or the header row in the clipboard matches the name of the column in Blazor Grid.

---

ADMIN EDIT

You can find an example of implementing this and the caveats it brings in the following sample project: https://github.com/telerik/blazor-ui/tree/master/grid/paste-from-excel

This feature requires research on how we could provide it as a built-in feature. So, any feedback on the matter will be appreciated.

---

Completed
Last Updated: 22 Oct 2020 05:49 by ADMIN
Release 2.19.0
1. Go to the last page

1. Click the Previous page button in the pager


<TelerikGrid Data="@MyData" Pageable="true" Navigable="true">
    <GridColumns>
        <GridColumn Field="ID"></GridColumn>
        <GridColumn Field="TheName" Title="Employee Name"></GridColumn>
    </GridColumns>
</TelerikGrid>

@code {
    public IEnumerable<object> MyData = Enumerable.Range(1, 50).Select(x => new { ID = x, TheName = "name " + x });
}
Completed
Last Updated: 25 Apr 2024 08:35 by ADMIN
Release 2024 Q2 (May)

The null type of operator can cause errors on the backend

*** Thread created by admin on customer behalf ***

Completed
Last Updated: 19 Apr 2021 17:04 by ADMIN
Release 2.24.0
Created by: Torsten
Comments: 1
Category: Grid
Type: Bug Report
1

Select one or more rows

Right click another of the rows (there is code in the OnContextMenu handler that changes the selected items to the currently clicked row)

<TelerikContextMenu @ref="@ContextMenuRef" Data="@MenuItems" OnClick="@((MenuItem item) => OnItemClick(item))"></TelerikContextMenu>

<TelerikGrid Data=@GridData
             @ref="Grid"
             SelectionMode="GridSelectionMode.Multiple"
             @bind-SelectedItems="@SelectedEmployees"
             @bind-Page="@CurrentPage"
             PageSize="@PageSize"
             OnRowContextMenu="OnContextMenu"
             Pageable="true">
    <GridColumns>
        <GridCheckboxColumn />
        <GridColumn Field=@nameof(Employee.EmployeeId) />
        <GridColumn Field=@nameof(Employee.Name) />
        <GridColumn Field=@nameof(Employee.Team) />
    </GridColumns>
</TelerikGrid>

@if (SelectedEmployees != null)
{
    <ul>
        @foreach (Employee employee in SelectedEmployees.OrderBy(e => e.EmployeeId))
        {
            <li>
                @employee.EmployeeId
            </li>
        }
    </ul>}

@code {
    public IEnumerable<Employee> SelectedEmployees { get; set; } = Enumerable.Empty<Employee>();
    TelerikContextMenu<MenuItem> ContextMenuRef { get; set; }
    TelerikGrid<Employee> Grid { get; set; }
    List<MenuItem> MenuItems { get; set; }
    int CurrentPage { get; set; } = 1;
    int PageSize { get; set; } = 5;

    //data binding and sample data
    public List<Employee> GridData { get; set; }

    protected override void OnInitialized()
    {
        GridData = new List<Employee>();
        for (int i = 0; i < 15; i++)
        {
            GridData.Add(new Employee()
            {
                EmployeeId = i,
                Name = "Employee " + i.ToString(),
                Team = "Team " + i % 3
            });
        }

        MenuItems = new List<MenuItem>()
    {
            new MenuItem(){ Text = "Delete", Icon = IconName.Delete, CommandName = "Delete"}
        };
    }

    protected async Task OnItemClick(MenuItem item)
    {
        if (item.Action != null)
        {
            item.Action.Invoke();
        }
        else
        {
            switch (item.CommandName)
            {
                case "Delete":
                    await Task.Delay(1); // do something

                    break;
            }
        }
    }

    protected async Task OnContextMenu(GridRowClickEventArgs args)
    {
        if (!(args.Item is Employee employee))
            return;

        SelectedEmployees = new List<Employee> { employee }; // this does not work

        if (args.EventArgs is MouseEventArgs mouseEventArgs)
        {
            await ContextMenuRef.ShowAsync(mouseEventArgs.ClientX, mouseEventArgs.ClientY);
        }
    }

    public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Team { get; set; }
    }

    public class MenuItem
    {
        public string Text { get; set; }
        public string Icon { get; set; }
        public Action Action { get; set; }
        public string CommandName { get; set; }
    }
}

 

*** Thread created by admin on customer behalf ***

Completed
Last Updated: 23 Feb 2023 07:22 by ADMIN
Release 2.30.0
Created by: Tom
Comments: 3
Category: Grid
Type: Feature Request
10

I would like to be able to customize the default format for dates and numbers that the grid has to, for example, use the current UI culture of my app.

*** Thread created by admin on customer behalf ***

Unplanned
Last Updated: 17 Sep 2020 13:04 by ADMIN
Created by: Jaco
Comments: 0
Category: Grid
Type: Feature Request
17

I want to know when the user moves focus to a new row - I intend to use that to select this row and to perform some operations on an adjacent grid.

----

ADMIN EDIT

The majority of things are possible through templates right now. You can put in the desired template (editor, row, cell, header, whatever you need to capture events from) and add the desired handler to your own DOM element. Then, you can alter the grid, if needed, through its state. If you need the row data item - it is available in the templates related to the data rows. If you need adjacent rows models - you can get them from the sorted list of grid data when you use its OnRead event - you have the current row and you can get a previous/next one as needed from that list.

That said, I am keeping this item open (status "Unplanned") so we can still gather any feedback and its popularity and what the community thinks, and whether it will be a meaningful addition to the component.

----

Completed
Last Updated: 30 Oct 2020 10:05 by ADMIN
Release 2.19.0
Created by: Jaco
Comments: 1
Category: Grid
Type: Bug Report
1

When I enter edit mode for a cell (I used InCell edit mode), the row height decreases.

 

*** Thread created by admin on customer behalf ***

Completed
Last Updated: 02 Dec 2021 15:20 by ADMIN
Release 2.30.0
Created by: Tom
Comments: 1
Category: Grid
Type: Feature Request
11

Hi,

 

It would be nice to have a property available on a GridColumn where you could indicate that the column should only be visible when you export the data, and not on, screen.

 

Thanks,

Tom

Completed
Last Updated: 04 Feb 2021 00:31 by ADMIN
Release 2.22.0

When I have a Navigable grid and I press Esc on the keyboard while editing/inserting a row, I want to do something (e.g., clean up the newly inserted row altogether from the data). Usually, I can use the OnCancel event for this, but it does not fire when pressing the Esc key on the keyboard.

*** Thread created on customer behalf by admin ***

Completed
Last Updated: 22 Jun 2021 19:26 by ADMIN
Release 2.25.0
Created by: Wei
Comments: 0
Category: Grid
Type: Feature Request
2

column virtualization is a great feature for wide table - and we would like to use keyboard navigation with it. 

can both be supported together?

thanks

wei

*** Thread created by admin on behalf of this customer ***

Duplicated
Last Updated: 04 Aug 2020 09:12 by ADMIN

With using the Grid, I have several GridCommandButtons. Instead of displaying the button with an icon followed by text, I wanted to display just the icon and use the TelerikTooltip to display the text on hover. When I set the GridCommandButton.Title and inspect the DOM, there is no title attribute on the button even though the description of the GridCommandButton.Title property reads "The title attribute of the Button".

 

<TelerikGrid @ref="@Grid"
                Data="@Data"
                Pageable="true"
                Groupable="false"
                Sortable="true"
                FilterMode="GridFilterMode.FilterMenu"
                Resizable="true"
                Reorderable="true"
                EditMode="GridEditMode.Popup"
                SelectionMode="GridSelectionMode.Multiple"
                PageSize="5"
                OnUpdate="@UpdateHandler"
                OnDelete="@DeleteHandler">
    <GridColumns>
        <GridColumn Field="@nameof(UserInfo.UserName)" Title="User Name" Width="100px" />
        <GridColumn Field="@nameof(UserInfo.Email)" Width="100px" />
        <GridColumn Field="@nameof(UserInfo.FirstName)" Title="First Name" Width="100px" />
        <GridColumn Field="@nameof(UserInfo.LastName)" Title="Last Name" Width="100px" />
        <GridColumn Field="@nameof(UserInfo.PhoneNumber)" Title="Phone #" Width="100px" />
        <GridCommandColumn Width="190px">
            <GridCommandButton Command="Save" Icon="save" ShowInEdit="true">Save</GridCommandButton>
            <GridCommandButton Title="Edit" Command="Edit" Icon="edit"></GridCommandButton>
            <GridCommandButton Title="Delete" Command="Delete" Icon="delete"></GridCommandButton>
            <GridCommandButton Command="Cancel" Icon="cancel" ShowInEdit="true">Cancel</GridCommandButton>
            <GridCommandButton Title="Reset Password" OnClick="@((args) => ResetPasswordModal.Show(((UserInfo)args.Item).Id))" Icon="@IconName.Lock"></GridCommandButton>
            <GridCommandButton>Roles</GridCommandButton>
            <GridCommandButton>Profiles</GridCommandButton>
        </GridCommandColumn>
    </GridColumns>
    <GridToolBar>
        <GridCommandButton Title="Refresh" OnClick="@LoadData" Icon="@IconName.Reload"></GridCommandButton>
        <GridCommandButton Title="Add User" OnClick="@(() => CreateUserModal.Show())" Icon="add"></GridCommandButton>
    </GridToolBar>
</TelerikGrid>
Completed
Last Updated: 20 Oct 2020 08:25 by ADMIN
Release 2.18.0
It use the OnCancel event to do some work and when it does not fire, I cannot invoke my logic.
Duplicated
Last Updated: 31 Jul 2020 17:59 by ADMIN

when setting a default filter in code the grid does not show any type of indicator that a filter is applied to a column

desiredState = newGridState<Employee>()
            {
                FilterDescriptors = newList<FilterDescriptorBase>()
                {
                    newCompositeFilterDescriptor()
                    {
                        FilterDescriptors = newFilterDescriptorCollection()
                        {
                            newFilterDescriptor() { Member = "Active", Operator = FilterOperator.IsEqualTo, Value = true, MemberType = typeof(bool) }
                        }
 
                    }
                }
            };

 

 

     
Completed
Last Updated: 02 Dec 2021 10:06 by ADMIN
Release 2.30.0

Using the Excel Export for Grid creates the Excel file, but on opening it, the columns that contain data are hidden. Unless I unhide the columns, the sprceadsheet looks empty.

---
ADMIN EDIT:
One idea to go about this is to expose an event that would allow users to modify the column width values before they get sent for export. The benefit of this approach is that if the columns are resized, the user will receive their current size in the specified unit e.g. rem, em or % and will be able to set the width in px.

Another idea is to default such column widths to some hardcoded value (say, 64px) or even the grid might try to calculate them (which can cause questionable results in stranger settings, but it is an idea - if an event gets exposed you will be able to do that in your application code).

---

Completed
Last Updated: 24 May 2021 10:02 by ADMIN
Release 2.22.0
At the moment it is not allowed, but I would like to freeze a few columns in the 100 columns that I have, and I use column virtualization for.
Completed
Last Updated: 27 Oct 2023 13:28 by ADMIN
Release 5.0.0 (15 Nov 2023) (R1 PI1)

Here's the reproducible:

@using System.ComponentModel.DataAnnotations
@* Used for the model annotations only *@

<strong>REPRO: activate the validation for the Name field to see the issue - click Save with an empty input</strong>

<TelerikGrid Data=@MyData EditMode="@GridEditMode.Popup" Pageable="true" Height="500px"
             OnUpdate="@UpdateHandler" OnDelete="@DeleteHandler" OnCreate="@CreateHandler">
    <GridToolBar>
        <GridCommandButton Command="Add" Icon="add">Add Employee</GridCommandButton>
    </GridToolBar>
    <GridColumns>
        <GridColumn Field=@nameof(SampleData.ID) Title="ID" Editable="false" />
        <GridColumn Field=@nameof(SampleData.Name) Title="Name" />
        <GridCommandColumn>
            <GridCommandButton Command="Save" Icon="save" ShowInEdit="true">Update</GridCommandButton>
            <GridCommandButton Command="Edit" Icon="edit">Edit</GridCommandButton>
            <GridCommandButton Command="Delete" Icon="delete">Delete</GridCommandButton>
            <GridCommandButton Command="Cancel" Icon="cancel" ShowInEdit="true">Cancel</GridCommandButton>
        </GridCommandColumn>
    </GridColumns>
</TelerikGrid>

@code {

    public class SampleData
    {
        public int ID { get; set; }

        [Required(ErrorMessage = "aa something else")] // the first word is 1 or 2 characters to show the issue
        public string Name { get; set; }
    }

    async Task UpdateHandler(GridCommandEventArgs args)
    {
        SampleData item = (SampleData)args.Item;

        // perform actual data source operations here through your service

        // if the grid Data is not tied to the service, you may need to update the local view data too
        var index = MyData.FindIndex(i => i.ID == item.ID);
        if (index != -1)
        {
            MyData[index] = item;
        }
    }

    async Task DeleteHandler(GridCommandEventArgs args)
    {
        SampleData item = (SampleData)args.Item;

        // perform actual data source operation here through your service

        // if the grid Data is not tied to the service, you may need to update the local view data too
        MyData.Remove(item);
    }

    async Task CreateHandler(GridCommandEventArgs args)
    {
        SampleData item = (SampleData)args.Item;

        // perform actual data source operation here through your service

        // if the grid Data is not tied to the service, you may need to update the local view data too
        item.ID = MyData.Count + 1;
        MyData.Insert(0, item);
    }


    public List<SampleData> MyData { get; set; }

    protected override void OnInitialized()
    {
        MyData = new List<SampleData>();

        for (int i = 0; i < 50; i++)
        {
            MyData.Add(new SampleData()
            {
                ID = i,
                Name = "Name " + i.ToString()
            });
        }
    }
}

Completed
Last Updated: 04 Sep 2020 11:48 by ADMIN
Release 2.17.0
My column data remains in the wrong order when column virtualization is enabled. Without column virtualization the issue does not exist.
Unplanned
Last Updated: 30 Jul 2021 06:45 by Dmytro
Created by: Javier
Comments: 2
Category: Grid
Type: Feature Request
7
When I resize a Locked column, the action is too slow and may even freeze my screen for a while.
Completed
Last Updated: 24 Sep 2020 09:44 by ADMIN
Release 2.18.0

Reproducible:

 

1. Run the snippet below
2. click the grid
3. press Down until you reach the last row, then press Down again

 

<TelerikGrid Navigable="true" Pageable="false"
             Data=@GridData Height="400px" >
    <GridColumns>
        <GridColumn Field=@nameof(Employee.Name) />
        <GridColumn Field=@nameof(Employee.Team) Title="Team" />
    </GridColumns>
</TelerikGrid>

@code {
    public List<Employee> GridData { get; set; }

    protected override void OnInitialized()
    {
        GridData = new List<Employee>();
        for (int i = 0; i < 15; i++)
        {
            GridData.Add(new Employee()
            {
                EmployeeId = i,
                Name = "Employee " + i.ToString(),
                Team = "Team " + i % 3
            });
        }
    }

    public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Team { get; set; }
    }
}
Unplanned
Last Updated: 17 Sep 2020 13:03 by ADMIN
Created by: Miriam
Comments: 5
Category: Grid
Type: Feature Request
5

 Similar to the focusout-event of html-input...I want to do something after leaving a row.

----

ADMIN EDIT

The majority of things are possible through templates right now. You can put in the desired template (editor, row, cell, header, whatever you need to capture events from) and add the desired handler to your own DOM element. Then, you can alter the grid, if needed, through its state. If you need the row data item - it is available in the templates related to the data rows. If you need adjacent rows models - you can get them from the sorted list of grid data when you use its OnRead event - you have the current row and you can get a previous/next one as needed from that list.

That said, I am keeping this item open (status "Unplanned") so we can still gather any feedback and its popularity and what the community thinks, and whether it will be a meaningful addition to the component.

----