C# Telerik Treeview数据绑定

C# Telerik Treeview数据绑定,c#,asp.net-mvc,telerik,C#,Asp.net Mvc,Telerik,我在一个孩子区绑定多个表时遇到问题。比如说我有5张桌子 contracts members phoneassessments homeassessments personalassessments 每个评估表都有引用MemberID,我需要在Members下的层中直接打印所有三种类型的评估,换句话说,如下所示 Contract 1 Member 1 Home Assessment 1 Home Assessment 2 Phone Ass

我在一个孩子区绑定多个表时遇到问题。比如说我有5张桌子

contracts
members
phoneassessments
homeassessments
personalassessments
每个评估表都有引用MemberID,我需要在Members下的层中直接打印所有三种类型的评估,换句话说,如下所示

Contract 1
    Member 1
        Home Assessment 1
        Home Assessment 2
        Phone Assessment 1
        Personal Assessment 1
        etc
    Member 2
Html.Telerik().TreeView()
   .Name("TreeName")
   .BindTo(Model, mappings =>
     {
       mappings.For<SMTXEFMVCModel.Contract>(binding => binding
         .ItemDataBound((item, contract) =>
           {
             item.Text = contract.Description;
             item.SpriteCssClasses = ("icon-contracts");
           })
           .Children(Contract => Contract.Members));
       mappings.For<SMTXEFMVCModel.Member>(binding => binding
         .ItemDataBound((item, member) =>
           {
             item.Text = member.FirstName + " " + member.LastName;
             item.SpriteCssClasses = ("icon-members");
           {)
           .Children(Members => Members.Assessments));
        mappings.For<(SMTXEFMVCModel.HomeAssessments,SMTXEFMVCModel.PhoneAssessments,
                      SMTXEFMVCModel.PersonalAssessments)>(binding => binding
         .ItemDataBound((item, assessments) =>
           {
             item.Text = HomeAssessments.AssessmentID.ToString()
             item.Text = PhoneAssessments.AssessmentID.ToString()
             item.Text = PersonalAssessments.AssessmentID.ToString()
        }));
     })
    )
我的密码是

Html.Telerik().TreeView()
   .Name("TreeName")
   .BindTo(Model, mappings =>
     {
       mappings.For<SMTXEFMVCModel.Contract>(binding => binding
         .ItemDataBound((item, contract) =>
           {
             item.Text = contract.Description;
             item.SpriteCssClasses = ("icon-contracts");
           })
           .Children(Contract => Contract.Members));
       mappings.For<SMTXEFMVCModel.Member>(binding => binding
         .ItemDataBound((item, member) =>
           {
             item.Text = member.FirstName + " " + member.LastName;
             item.SpriteCssClasses = ("icon-members");
        }));
     })
    )
在我的视图中,我使用它作为IEnumerable来从模型中强类型表。(在我看来,下面这一行是第一行

@model IEnumerable<SMTXEFMVCModel.Contract>
@model IEnumerable

如果您的类彼此之间有正确的关系,它应该简单到:

Html.Telerik().TreeView() 
            .Name("TreeName") 
            .BindTo(Model, mappings =>  
            { 
                mappings.For<SMTXEFMVCModel.Contract>(binding => binding 
                        .ItemDataBound((item, contract) => 
                        { 
                            item.Text = contract.Description;
                            item.SpriteCssClasses = ("icon-contracts");
                        }) 
                        .Children(contract => contract.Members)); 
                mappings.For<SMTXEFMVCModel.Member>(binding => binding 
                        .ItemDataBound((item, member) => 
                        { 
                            item.Text = member.FirstName + " " + member.LastName;
                            item.SpriteCssClasses = ("icon-members");
                        }) 
                        .Children(member => member.Assessments)); 
                mappings.For<MSMTXEFMVCModel.Assessments>(binding => binding 
                        .ItemDataBound((item, assessments) => 
                        { 
                            item.Text = assessments.AssessmentType;
                            ...
                        }));
            }) 
Html.Telerik().TreeView()
.名称(“TreeName”)
.BindTo(模型,映射=>
{ 
mappings.For(binding=>binding
.ItemDataBound((项目,合同)=>
{ 
item.Text=合同描述;
item.spritecsclasses=(“图标合同”);
}) 
.儿童(合同=>合同成员);
mappings.For(binding=>binding
.ItemDataBound((项目,成员)=>
{ 
item.Text=member.FirstName+“”+member.LastName;
item.spritecsclass=(“图标成员”);
}) 
.儿童(成员=>成员评估);
mappings.For(binding=>binding
.ItemDataBound((项目,评估)=>
{ 
item.Text=assessments.AssessmentType;
...
}));
}) 
我说这应该是因为Telerik控件的确切功能在你推进正常边界时往往变得“模糊”,特别是像MVC控件这样的新控件

我相信您已经看过了这些示例,但是文档中没有显示如何执行您尝试执行的操作的确切示例。我已经使用上述代码实现了这一点,但是我的模型和类的设置可能与您的不同。

警告,这是“解决方案”没有使用telerik treeview的数据绑定版本,但是对于任何试图将多个表嵌套到treeview的一个层中的人来说,它似乎是一个很可能的候选

@(

Html.Telerik().TreeView()
    .Name("SeniorMetrix")
    .Items(member => {
      foreach (var member1 in members)
            member.Add()
            .Text(member1.FirstName.ToString())
            .SpriteCssClasses("icon-members")
            .Items(occurance =>
            {
            //lets print In-Home Assessments first
            foreach (var inhomeassessment1 in inHomeAssessments)
              if (inhomeassessment1.MemberID == member1.MemberID)
              {
                occurance.Add()
                .Text("In-Home Assessment #" + inhomeassessment1.InHomeAssessmentID.ToString())
                .SpriteCssClasses("icon-assessments");
              }
            //now we print Telephonic Assessments
            foreach (var telephonicassessment1 in telephonicAssessments)
              if (telephonicassessment1.MemberID == member1.MemberID)
              {
                occurance.Add()
                .Text("Telephonic Assessment #" + telephonicassessment1.TelephonicAssessmentID.ToString())
                .SpriteCssClasses("icon-phone");
              }
            //finally, let's print Episodes
            foreach (var episode1 in episodes)
              if (episode1.MemberID == member1.MemberID)
              {
                occurance.Add()
                .Text("Episode #" + episode1.EpisodeID.ToString())
                .SpriteCssClasses("icon-episodes")
                .Items(assessment =>
                  {
                    foreach (var assessment1 in Episodes)
                      if (assessment1.EpisodeID == episode1.EpisodeID)
                      {
                        if (assessment1.AssessmentTypeID == 1)
                        {
                          assessment.Add()
                        .Text("Admission Assessment #" + afeassessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                        if (assessment1.AssessmentTypeID == 2)
                        {
                          assessment.Add()
                        .Text("Interum Assessment #" + assessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                        if (assessment1.AssessmentTypeID == 3)
                        {
                          assessment.Add()
                        .Text("Discharge Assessment #" + assessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                        if (assessment1.AssessmentTypeID == 4)
                        {
                          assessment.Add()
                        .Text("Followup Assessment #" + assessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                      }
                });
          }});
     }))

这将列出各个成员的所有评估(如果我将所有评估存储在一个表中,这将是非常好的,但我正在查看3个不同的评估表(电话、电话、个人)进入这一层。我需要所有三个层的映射。我将编辑我的帖子,以显示我觉得它可能会是什么样子,尽管我无法让它工作。如果你的模型为成员正确设置,它似乎可以工作。评估。你能发布更多关于模型结构的信息吗?你到底想知道什么?我对一些术语相当陌生。您需要表名、关系(1到多),从实体框架中的模型创建的类名?是的,EF信息。每个表都有自己的类吗?它有自己的上下文吗?实现更新的代码时会显示什么?每个表都有自己的类。每个表都没有自己的上下文(这将在控制器中定义?)目前在控制器中,我传递了treeview(契约)中使用的第一个上下文,这仍然让我可以深入到我想要的地方。我将使用treeview的控制器操作结果更新帖子。更新的代码不会调试,多重for映射的语法非常错误。:(你真是太狡猾了,对条件句的思考很好。很高兴你找到了让它对你有用的方法。
@(

Html.Telerik().TreeView()
    .Name("SeniorMetrix")
    .Items(member => {
      foreach (var member1 in members)
            member.Add()
            .Text(member1.FirstName.ToString())
            .SpriteCssClasses("icon-members")
            .Items(occurance =>
            {
            //lets print In-Home Assessments first
            foreach (var inhomeassessment1 in inHomeAssessments)
              if (inhomeassessment1.MemberID == member1.MemberID)
              {
                occurance.Add()
                .Text("In-Home Assessment #" + inhomeassessment1.InHomeAssessmentID.ToString())
                .SpriteCssClasses("icon-assessments");
              }
            //now we print Telephonic Assessments
            foreach (var telephonicassessment1 in telephonicAssessments)
              if (telephonicassessment1.MemberID == member1.MemberID)
              {
                occurance.Add()
                .Text("Telephonic Assessment #" + telephonicassessment1.TelephonicAssessmentID.ToString())
                .SpriteCssClasses("icon-phone");
              }
            //finally, let's print Episodes
            foreach (var episode1 in episodes)
              if (episode1.MemberID == member1.MemberID)
              {
                occurance.Add()
                .Text("Episode #" + episode1.EpisodeID.ToString())
                .SpriteCssClasses("icon-episodes")
                .Items(assessment =>
                  {
                    foreach (var assessment1 in Episodes)
                      if (assessment1.EpisodeID == episode1.EpisodeID)
                      {
                        if (assessment1.AssessmentTypeID == 1)
                        {
                          assessment.Add()
                        .Text("Admission Assessment #" + afeassessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                        if (assessment1.AssessmentTypeID == 2)
                        {
                          assessment.Add()
                        .Text("Interum Assessment #" + assessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                        if (assessment1.AssessmentTypeID == 3)
                        {
                          assessment.Add()
                        .Text("Discharge Assessment #" + assessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                        if (assessment1.AssessmentTypeID == 4)
                        {
                          assessment.Add()
                        .Text("Followup Assessment #" + assessment1.AssessmentID.ToString())
                        .SpriteCssClasses("icon-assessment");
                        }
                      }
                });
          }});
     }))