ASP.NET CORE Kendo Grid: динамическое заполнение сетки - PullRequest
0 голосов
/ 13 сентября 2018

Когда пользователь нажимает на дату с помощью Календаря, он динамически заполняет сетку временем.Если кто-то вводит данные и соответствующей записи нет, сетка вставит новую запись, если пользователь отредактирует существующую строку, которая запустит обновление.Как мы это реализуем?

enter image description here

1 Ответ

0 голосов
/ 13 сентября 2018

Компоненты telerik работают за кулисами с источником данных. Я считаю, что примеры источников данных jquery полезны для работы с ними telerik Источник данных jquery

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

если ваша сетка настроена как показано ниже

@(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));

    }
}

Надеюсь, это поможет. Я знаю, как тяжело освоить эти сетки, но они великолепны, когда вы понимаете, как они работают

...