2013-05-06 4 views
0

Я хочу заполнить кендо-сетку списком сотрудников. Когда я отправляю список сотрудников непосредственно в сетку, сетка заполняется. Когда я немного манипулирую списком, сетка пуста. Класс employee имеет поле bool «selected», которое мне нужно манипулировать. При остановке контроллера в отладчике в обоих случаях список насчитывает 600 сотрудников, поэтому данные есть.Пустая сеть kendo-ui

Вот код, с точки зрения (я даже не привязка к свойству «выбранной» - подумал, что может быть проблема)

@(Html.Kendo().Grid<TRS.MVC.Models.SelectEmployeeModel>() 
    .Name("gridEmployee") 
    .HtmlAttributes(new { style = "height: 300px" }) 
    .Columns(columns => 
    { 

     columns.Bound(p => p.CompanyCode).Width(100); 
     columns.Bound(p => p.EmployeeCode).Width(100); 
     columns.Bound(p => p.EmployeeName).Width(100); 
    }) 
    .Selectable(selectable => selectable 
     .Mode(GridSelectionMode.Single)) 
    .Navigatable() 
    .Scrollable() 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Read(read => read.Action("GetEmployees", "EmployeeSelectDlg")) 
    ) 

) 

Вот код, который работает

public ActionResult GetEmployees([DataSourceRequest]DataSourceRequest request) 
    { 
     List<SelectEmployeeModel> employeesForGrid; 
     employeesForGrid = (from e in trs.Employees select e).ToList(); 
     return Json(employeesForGrid.ToDataSourceResult(request)); 
    } 

И код, который не работает (сетка пуста). В обоих случаях при остановке в отладчике «employeesForGrid» имеет 600 элементов.

public ActionResult GetEmployees([DataSourceRequest]DataSourceRequest request) 
    { 
     List<Employee> jobEmployees; 
     List<SelectEmployeeModel> employeesForGrid; 
     Job selectedJob = (from j in trs.Jobs.Include("JobEmployees") where j.JobKey == selectedJobKey select j).First(); 
     if (selectedJob.JobEmployees.Any()) 
      jobEmployees = (from j in selectedJob.JobEmployees select j).Select(eq => eq.Employee).ToList(); 
     else 
      jobEmployees = new List<Employee>(); 
     employeesForGrid = (from e in trs.Employees select new SelectEmployeeModel() { Employee = e, Selected = jobEmployees.Contains(e) }).ToList(); 
     return Json(employeesForGrid.ToDataSourceResult(request)); 
    } 

Нет сообщений об ошибках только в пустой сетке.

ответ

0

Итак, как выясняется, вы не можете сделать это:

public class SelectEmployeeModel 
{ 
    public Employee Employee { get; set; } 
    public bool Selected { get; set; } 
    public string CompanyCode { get { return this.Employee.CompanyCode; } } 
    public string EmployeeCode { get { return this.Employee.EmployeeCode; } } 
    public string EmployeeName { get { return this.Employee.EmployeeName; } } 

    public SelectEmployeeModel() 
    { 

    } 
} 

Вместо этого я просто сделал это:

public class SelectEmployeeModel 
{ 
    public bool Selected { get; set; } 
    public string CompanyCode { get; set; } 
    public string EmployeeCode { get; set; } 
    public string EmployeeName { get; set; } 

    public SelectEmployeeModel() 
    { 

    } 
} 

И изменен код контроллера:

 employeesForGrid = (from e in trs.Employees select new SelectEmployeeModel() { 
      CompanyCode = e.CompanyCode, 
      EmployeeCode = e.EmployeeCode, 
      EmployeeName = e.EmployeeName, 
      Selected = jobEmployees.Contains(e) }).ToList(); 

Это исправлено.

0

Хорошо для меня структура отличается, в первом случае коллекция заполнена объектами типа SelectEmployeeModel.

employeesForGrid = (from e in trs.Employees select e).ToList(); 

А во втором случае, коллекция полна SelectEmployeeModels объектов, которые Employee свойство фактически SelectEmployeeModel, остальные свойства, как представляется, не определено.

Что произойдет, если вы связать столбцы этой вложенной собственности

columns.Bound(p => p.Employee.CompanyCode).Width(100); 
    columns.Bound(p => p.Employee.EmployeeCode).Width(100); 
    columns.Bound(p => p.Employee.EmployeeName).Width(100); 
+0

Извините, я должен был уточнить, что код для представления был изменен для представления данных, которые были возвращены. Сотрудник для кода контроллера, который работал, и EmployeeSelectModel для кода, который этого не сделал. Я попробовал ваше предложение, но все равно никаких данных. EmployeeSelectModel предоставляет свойства CompanyCode, EmployeeCode и EmployeeName модели сотрудника, которые передаются конструктору. – Bob

Смежные вопросы