Как добавить 2 разных модели как детей в Telerik Treeview (MVC) - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующая структура:

ReportGroup (которая имеет обнуляемую ParentReportGroup), и у каждой группы отчетов есть дочерние отчеты. Я хочу отображать группы отчетов как папки и отчеты как элементы. Примерно так:

//ReportGroupA

//|__>ReportGroupB

//   |___>ReportA

//   |___>ReportB

//|__>ReportC

//ReportGroupC

//|__>ReportD

et c

Я использую локальную привязку, но с удовольствием меняю при необходимости.

вот вид:

@(Html.Kendo().TreeView()
             .Name("treeview-left")
             .BindTo((IEnumerable<ReportGroup>)ViewBag.inline, (NavigationBindingFactory<TreeViewItem> mappings) =>
             {
                 mappings.For<ReportGroup>(binding => binding.ItemDataBound((item, category) =>
                 {
                     item.Text = category.Name;
                     item.Id = category.ID.ToString();
                     item.HtmlAttributes.Add("class", "reportgroup");
                     if (category.Content != null)
                     {
                         item.ImageUrl = Url.Action("ShowReportGroupImage", "Image", new { id = category.ID, size = 1 });
                     }
                 }).Children(category => category.ChildGroups)/*.Children(category => category.Reports)*/);

                 mappings.For<ReportGroupViewModel>(binding => binding.ItemDataBound((item, rcategory) =>
                 {
                     item.Text = rcategory.Name;
                     item.Id = rcategory.ID.ToString();
                     item.HtmlAttributes.Add("class", "reportgroup");
                     if (rcategory.Content != null)
                     {
                         item.ImageUrl = Url.Action("ShowReportGroupImage", "Image", new { id = rcategory.ID, size = 1 });
                     }
                 }).Children(category => category.Reports));

                 mappings.For<Report>(binding => binding.ItemDataBound((item, subCategory) =>
                 {
                     item.Text = subCategory.Name;
                     item.Id = subCategory.ID.ToString();
                     item.HtmlAttributes.Add("class", "reportitem");
                 }));
             })
)

Вот встроенный контроллер, который создает ViewBag.Inline:

private IEnumerable<ReportGroup> Local_Data_Binding_Get_Inline_Data()
    {
        var user = (from u in db.Users
                    where u.UserName == User.Identity.Name
                    select u).First();
        var reportGroups = (from rg in db.ReportGroups
                            where rg.ParentGroup_ID == null
                            select rg).Include("Reports").ToList();

        foreach (var rg in reportGroups)
        {
            rg.ChildGroups = (from _rg in db.ReportGroups.Include("Reports")
                             where _rg.ParentGroup_ID == rg.ID
                             select new ReportGroupViewModel
                             {
                                 Name = _rg.Name,
                                 Content = _rg.Content,
                                 ContentType = _rg.ContentType,
                                 FileName = _rg.FileName,
                                 ID = _rg.ID,
                                 Reports = _rg.Reports,
                                 SequenceNumber = _rg.SequenceNumber
                             }).ToList();

        }

        List<ReportGroup> inline = reportGroups;

        return inline;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...