2015-06-05 7 views
1
[Serializable] 
    public class ContactDto 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string CompanyName { get; set; } 
     public Dictionary<string, string> CustomFields { get; set; } 
    } 

У меня есть класс contactdto со словарем пользовательских полей. Это может быть что-то «MotherName» «Birthdate» и т. Д.Kendo grid - добавление столбца из вложенного словаря

Как отображать пользовательские поля в виде столбцов в сетке кендо? Все контакты contactOTO будут иметь одинаковые ключи словаря. Я использую помощники ASP.net MVC.

Я пытался что-то вроде - что не работает -

@(Html.Kendo().Grid<ContactDto>(Model) 
.Name("ReportViewer-Data") 
.Columns(columns => 
{ 
    columns.Bound("FirstName"); 
    columns.Bound("LastName"); 
    columns.Bound("CustomFields.Industry"); 
}) 
.Sortable() 
.Pageable(pageable => pageable.PageSizes(true).ButtonCount(5)) 
.Groupable() 
.Selectable(selectable => selectable.Mode(GridSelectionMode.Multiple)) 
.Resizable(resize => resize.Columns(true)) 
.Reorderable(reorder => reorder.Columns(true)) 
.DataSource(dataSource => dataSource 
.Ajax() 
.PageSize(20) 
.Read(read => read.Action("DataView_Test", "Reports")) 
) 
) 
+0

Вы хотите отобразить словарь как столбец в той же сетке, что и другой атрибут? или во вложенной сетке внутри первой сетки? и не могли бы вы дать некоторый фиктивный json в качестве примера –

+0

Я хочу иметь такие столбцы, как FirstName LastName BirthDate MothersName - последние 2 столбца из словаря – MoXplod

ответ

1

Предполагая, что ваши данные JSon из бэкэндом будет похож на этот

data: [{ 
    FirstName: "John", 
    LastName: "Doe", 
    CustomField: { 
     BirthDate: "9 June 1999", 
     MotherName: "Valen" 
    } 
}, { 
    FirstName: "Ray", 
    LastName: "Doe", 
    CustomField: { 
     BirthDate: "9 June 1998", 
     MotherName: "Valen" 
    } 
}, { 
    FirstName: "Grey", 
    LastName: "Doe", 
    CustomField: { 
     BirthDate: "9 June 1997", 
     MotherName: "Valen" 
    } 
}] 

Поскольку кендо DataSource в настоящее время не поддерживает сложные данные type как массив и объект.

Обойти можно было бы добавить схему к вашему DataSource как этот

schema: { 
    parse: function (response) { 
     var items = []; 
     for (var i = 0; i < response.length; i++) { 
      console.log(response); 
      var item = { 
       FirstName: response[i].FirstName, 
       LastName: response[i].LastName, 
       BirthDate: response[i].CustomField.BirthDate, 
       Mother: response[i].CustomField.MotherName 
      }; 

      items.push(item); 
     } 
     return items; 
    }, 
    pageSize: 20 
}, 

После получения данных и DataSource будет анализировать customField, который вложен в нормальное поле. Пожалуйста, обратитесь к этой работе example.

+0

Спасибо за подробный ответ - это действительно помогает - знаете ли вы, как это переводится в HTMLHelper MVC-обертка? Я пойду с этим чистым решением JS, если я не смогу найти правильный способ сделать то же самое с оберткой MVC UI. – MoXplod

+1

Позвольте мне кое-что сделать, потому что я его еще не использовал. Я обновлю это, если мне удастся найти один –

+0

спасибо - отметив это как ответ, поскольку это довольно близко. – MoXplod

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