【问题标题】:ASP.NET CORE Kendo Grid: Populating a grid dynamicallyASP.NET CORE Kendo Grid:动态填充网格
【发布时间】:2018-09-13 14:22:40
【问题描述】:

当用户使用日历点击日期时,它会根据时间动态填充网格。如果有人输入数据并且没有相应的记录,如果用户编辑将触发更新的现有行,则网格将插入一条新记录。我们如何实现它?

【问题讨论】:

    标签: asp.net asp.net-mvc kendo-ui kendo-grid


    【解决方案1】:

    telerik 组件在后台对数据源进行操作。我发现 jquery 数据源示例对使用它们很有帮助telerik jquery datasource

    当您配置网格并添加保存选项时,它将调用数据源上的同步方法。网格将跟踪您对数据源所做的更改类型,即插入、更新、删除,并将为您所做的每个更改调用适当的方法。datasource configuration and events。您只需要确保您的控制器中有一个方法可以对每种类型的更改执行您想要的操作。

    如果您的网格设置如下

    @(Html.Kendo().Grid<Mymodel>()
                    .Name("MyGrid")
                    .Columns(col =>
                    {
                        col.Bound(x => x.MyId).Hidden();
                        col.Bound(x => x.AnotherField).Title("Product Name");
                        col.Bound(x => x.Athirdfield);
                        col.Command(cmd => { cmd.Edit(); }).Title("Actions");
                    })
                    .ToolBar(tb => { tb.Save(); })
                    .Editable(ed => ed.Mode(GridEditMode.InLine))
                    .DataSource(ds => ds
                    .Ajax()
                    .Model(md =>
                    {
                        md.Id(m => m.MyId);                        
                    })
                    .PageSize(10)
                    .Read(read => read.Action("Read", "MyGrid"))
                    .Create(cr => cr.Action("Create","MyGrid"))
                    .Update(up => up.Action("Update", "MyGrid"))
                    .Destroy(de => de.Action("Delete", "MyGrid")))
                    .Filterable()
                    .Pageable()
                )
    

    现在,当您的网格发现需要插入(或创建)时,它将使用您在 .Create() 方法中确定的方法和控制器。

    那么你的控制器只需要像下面这样处理你的操作的业务逻辑(我这里只包含了一个读取和更新方法)

    public class MYGridController : Controller
    {
        private readonly dbContext _context;
        public MyGridController(DB context)
        {
            _context = context;
        }
    
        public IActionResult Index()
        {
            return View();
        }
    
        public async Task<IActionResult> Read([DataSourceRequest]DataSourceRequest request)
        {
            return Json(await _context.MyModel.ToDataSourceResultAsync(request));
        }
    
        public async Task<IActionResult> Update([DataSourceRequest]DataSourceRequest request, MyModel pm)
        {
            try
            {
                _context.Update(pm);
                await _context.SaveChangesAsync();
                return Json(await new[] { pm }.ToDataSourceResultAsync(request, ModelState));
            }
            catch (DbUpdateException)
            {
                ModelState.AddModelError("", "Error");
            }
            return Json(await new[] { pm }.ToDataSourceResultAsync(request, ModelState));
    
        }
    }
    

    我希望这会有所帮助。我知道掌握这些网格有多么困难,但是一旦您了解它们的工作原理,它们就会很棒

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多