Product Bundles
DevCraft
All Telerik .NET and Kendo UI JavaScript components and AI Tools in one package.
Kendo UI
Bundle of AI Tools plus four JavaScript UI libraries built natively for jQuery, Angular, React and Vue.
Telerik
Build great .NET business apps
.Net Web
Cross-Platform
Desktop
Reporting and Documents
Testing & Mocking
Debugging
Build JavaScript UI
Javascript
AI for Developers & IT
Ensure AI program success
AI Coding
Additional Tools
Enhance the developer and designer experience
UI/UX Tools
Free Tools
CMS
Support and Learning
Docs & Resources
Productivity and Design Tools
Hi David,
You can hide the close ("X") button on the Grid Edit Popup by using a small CSS rule. Here’s how to achieve this:
@using System.ComponentModel.DataAnnotations @using Telerik.DataSource @using Telerik.DataSource.Extensions <style> .hide-button .k-window-titlebar-actions { display: none; } </style> <TelerikGrid OnRead="@OnGridRead" TItem="@Product" EditMode="@GridEditMode.Popup" OnCreate="@OnGridCreate" OnDelete="@OnGridDelete" OnUpdate="@OnGridUpdate"> <GridSettings> <GridPopupEditSettings Class="hide-button" /> </GridSettings> <GridToolBarTemplate> <GridCommandButton Command="Add">Add Item</GridCommandButton> </GridToolBarTemplate> <GridColumns> <GridColumn Field="@nameof(Product.Name)" /> <GridColumn Field="@nameof(Product.Price)" DisplayFormat="{0:C2}" /> <GridColumn Field="@nameof(Product.Quantity)" DisplayFormat="{0:N0}" /> <GridColumn Field="@nameof(Product.ReleaseDate)" DisplayFormat="{0:d}" /> <GridColumn Field="@nameof(Product.Discontinued)" Width="120px" /> <GridCommandColumn Width="180px"> <GridCommandButton Command="Edit">Edit</GridCommandButton> <GridCommandButton Command="Delete">Delete</GridCommandButton> </GridCommandColumn> </GridColumns> </TelerikGrid> @code { private ProductService GridProductService { get; set; } = new(); private async Task OnGridCreate(GridCommandEventArgs args) { var createdItem = (Product)args.Item; await GridProductService.Create(createdItem); } private async Task OnGridDelete(GridCommandEventArgs args) { var deletedItem = (Product)args.Item; await GridProductService.Delete(deletedItem); } private async Task OnGridRead(GridReadEventArgs args) { DataSourceResult result = await GridProductService.Read(args.Request); args.Data = result.Data; args.Total = result.Total; args.AggregateResults = result.AggregateResults; } private async Task OnGridUpdate(GridCommandEventArgs args) { var updatedItem = (Product)args.Item; await GridProductService.Update(updatedItem); } public class Product { public int Id { get; set; } [Required] public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public decimal? Price { get; set; } public int Quantity { get; set; } [Required] public DateTime? ReleaseDate { get; set; } public bool Discontinued { get; set; } } #region Data Service public class ProductService { private List<Product> Items { get; set; } = new(); private int LastId { get; set; } public async Task<int> Create(Product product) { await SimulateAsyncOperation(); product.Id = ++LastId; Items.Insert(0, product); return LastId; } public async Task<bool> Delete(Product product) { await SimulateAsyncOperation(); if (Items.Contains(product)) { Items.Remove(product); return true; } return false; } public async Task<List<Product>> Read() { await SimulateAsyncOperation(); return Items; } public async Task<DataSourceResult> Read(DataSourceRequest request) { return await Items.ToDataSourceResultAsync(request); } public async Task<bool> Update(Product product) { await SimulateAsyncOperation(); int originalItemIndex = Items.FindIndex(x => x.Id == product.Id); if (originalItemIndex != -1) { Items[originalItemIndex] = product; return true; } return false; } private async Task SimulateAsyncOperation() { await Task.Delay(100); } public ProductService(int itemCount = 5) { Random rnd = Random.Shared; for (int i = 1; i <= itemCount; i++) { Items.Add(new Product() { Id = ++LastId, Name = $"Product {LastId}", Description = $"Multi-line\ndescription {LastId}", Price = LastId % 2 == 0 ? null : rnd.Next(0, 100) * 1.23m, Quantity = LastId % 2 == 0 ? 0 : rnd.Next(0, 3000), ReleaseDate = DateTime.Today.AddDays(-rnd.Next(365, 3650)), Discontinued = LastId % 2 == 0 }); } } } #endregion Data Service }
Regards, Hristian Stefanov Progress Telerik
Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.