В моем проекте есть две основные проблемы, которые мешают мне сделать нормальный основной сетевой интерфейс Kendo UI. 1. У меня нет полного доступа к требуемым данным SQL (я не могу создать представление). 2. Одно из полей невероятно велико (поле перегружает ViewModel).Как правильно привязать и заполнить сетку пользовательского интерфейса Kendo двумя таблицами EF?
Я смог заставить свою сетку работать, но я чувствую, что есть лучший способ выполнить задачу. Моя проблема, по сути, заключается в том, что я могу только представить gridbind для одной таблицы БД. Чтобы получить это, я привязался к полю внешнего ключа и использовал clientTemplate для заполнения данных из чтения, но я чувствую, что должен быть более прямой способ привязать поле к данным. Мои прочитанные данные - это actionresult Linq join из EF, преобразованный в JSON. Вот мой код, если кто-нибудь может сделать предложение. D_Type из таблицы 2, что я пытаюсь связать непосредственно с колонкой:
@(Html.Kendo().Grid<ProjectName.Models.Table1>()
.Name("grid")
.Scrollable()
.ColumnMenu()
.Reorderable(reorder => reorder.Columns(true))
.Columns(columns =>
{
columns.Bound(c => c.P_Name);
columns.Bound(c => c.E_Name);
//Cannot be directly bound to a column because it is part of Table2 table
columns.Bound(c => c.TypeId).Title("Type").ClientTemplate("#= D_Type #").Filterable(false);
columns.Command(command => command.Custom("Details").Click("showDetails")).Title("Results").Width(80);
columns.Bound(c => c.Destination);
columns.Bound(c => c.Location);
columns.Bound(c => c.Version);
columns.Bound(c => c.StartDt);
columns.Bound(c => c.EndDt);
columns.Bound(c => c.StartDt).Title("Duration").ClientTemplate("#: calcDuration(StartDt, EndDt) #").Sortable(false).Filterable(false);
columns.Bound(c => c.);
columns.Bound(c => c.MiscNotes).ClientTemplate("#: errorDisplay(ResultObject) # ").Sortable(false).Filterable(false);
})
//Style dictates full grid height
.HtmlAttributes(new { style = "height: 725px;" })
.Filterable()
.Resizable(resize => resize.Columns(true))
.Sortable(sortable => sortable
.AllowUnsort(true)
.SortMode(GridSortMode.SingleColumn))
.Pageable(pageable => pageable
.Refresh(false)
.PageSizes(true)
.ButtonCount(5))
.Events(e => e.DataBound("onDataBound"))
.DataSource(dataSource => dataSource
.Ajax()
.Sort(sort => sort.Add("StartDt").Descending())
.Read(read => read.Action("Project_Read", "Grid"))
.PageSize(20)
.ServerOperation(true)
)
)
Это работает 99% времени, но, к сожалению, я получаю ошибку System.OutofMemory, делая это так из-за размера одного из полей. – fdsafdsafdsafdsafs
Затем продолжайте делать это так, как вы это делаете (с извлечением и показом D_Type по запросу) ... не так много, что сетка может сделать, если размер одного из ваших полей будет таким большим. Я также сомневаюсь в необходимости отображения таких данных (в частности, не для вас, я также задаю вопрос пользователям, которым требуется 1200-страничный отчет, который они никогда не будут читать и просто хотят получить дамп XLSX) ... если компьютер не может обработать это комфортно, человек действительно собирается обрабатывать/делать что-либо значимое с данными на экране или их глазу на глазах? –
Повторное чтение вашего решения позволило мне увидеть, где моя ошибка. Я поместил ViewModel в ActionResult Read, а не как отдельную модель. Вот почему он посылал слишком много данных на виртуальную машину. Иногда вам просто нужно сделать шаг назад и снова прочитать вещи. Спасибо. – fdsafdsafdsafdsafs