Telerik Treeview DataBinding
I'm having problems data binding multiple tables in one teir of children. So say for instance I have 5 tables.
contracts
members
phoneassessments
homeassessments
personalassessments
Each Assessment table has the referencing MemberID and I need to print all three types of assessments in the tiers directly under Members, in other words to look like this.
Contract 1
Member 1
Home Assessment 1
Home Assessment 2
Phone Assessment 1
Personal Assessment 1
etc
Member 2
The code I have is...
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");
}));
})
)
So my question is, what comes next? What's the syntax?
I can't help but think it will look something like this.
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));
m开发者_如何学Goappings.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()
}));
})
)
Here's the relevant ActionResult for my controller
public ActionResult TreeView()
{
var ctx = new SMTXContext();
var Contracts = ctx.Contracts.ToList();
return View(Contracts);
}
which I use in my view as an IEnumerable to Strongly type the tables from the model. (The below line is the first line in my view.
@model IEnumerable<SMTXEFMVCModel.Contract>
Provided your classes have the correct relationship with each other, It should be as simple as:
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;
...
}));
})
I say it should be because the exact functionality of Telerik controls tends to get "hazy" as you push the normal boundaries, especially newer ones like MVC controls.
I'm sure you've already looked at the examples here, but there is nothing in the documentation showing an exact example of how to do what you're trying to do. I've gotten this to work using the above code, but my model and classes may not be set up the same way yours are.
Warning, this "solution" isn't using the databinding version of the telerik treeview, but for anyone seeking to nest multiple tables into a single tier in the treeview, it seems to be a likely candidate.
@(
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");
}
}
});
}});
}))
精彩评论