일반적인 결과 집합을 가져 와서 jQuery Dyantree를 사용하여 ASP.NET MVC로 트리 구조로 변환하는 방법을 찾고 있습니다.재귀 속성 사용 ASP.NET/C#
public class GenericResults
{
public string ClaimId { get; set; }
public string DrugName { get; set; }
public int PatientId { get; set; }
//simulates database call, this could be any type of result set
public static List<GenericResults> MockDatabaseCall()
{
return new List<GenericResults>()
{
new GenericResults { ClaimId = "abc", DrugName="Drug 1", PatientId=1 },
new GenericResults { ClaimId = "bcd", DrugName="Drug 2", PatientId=1 },
new GenericResults { ClaimId = "def", DrugName="Drug 3", PatientId=1 },
new GenericResults { ClaimId = "fgi", DrugName="Drug 4", PatientId=1 },
new GenericResults { ClaimId = "ijk", DrugName="Drug 5", PatientId=2 },
new GenericResults { ClaimId = "klm", DrugName="Drug 6", PatientId=2 },
new GenericResults { ClaimId = "mno", DrugName="Drug 7", PatientId=2 },
new GenericResults { ClaimId = "pqr", DrugName="Drug 8", PatientId=2 },
new GenericResults { ClaimId = "qrs", DrugName="Drug 9", PatientId=2 },
new GenericResults { ClaimId = "stu", DrugName="Drug 10", PatientId=2 },
};
}
}
데이터가 Dynatree 위해에 있어야 구조는 같다 : 내가 좋아하는 테스트 클래스를 가지고
public string Title { get; set; }
public List<TreeView> Children { get; set; }
public bool IsFolder
{
get
{
return this.Children.Count > 0;
}
}
이 예에서, 우리는 정말 ClaimId
속성을 필요가 없습니다
TreeView
개체가되고
Children
속성이 그룹화 된 값을 가진 모든 레코드가되어야합니다. 지금까지
MockDatabaseCallMethod
, 내가
PatientId
에 그룹화하면 두 개의
TreeView
개체가 필요합니다. 각 고유 한 PatientId에 하나씩. 이 작업을 재귀 적으로 수행 할 수는 있지만 일부 항목은 나뭇잎 (자식 없음)이 될 것이므로 그 방법은 잘 모르겠습니다. 이상적으로
public class TreeView
{
public string Title
{
get;
set;
}
public List<TreeView> Children { get; set; }
public bool IsFolder
{
get
{
return this.Children.Count > 0;
}
}
//made void for the time being to limit compilation errors
public static void ListToTree(string displayName,string groupedOn)
{
//seed data
List<GenericResults> results = GenericResults.MockDatabaseCall();
//"group" on the property passed by the user
var query = results.Select(x => x.GetType().GetProperty(groupedOn).GetValue(x,null)).Distinct();
foreach (var i in query)
{
var treeView = new TreeView();
treeView.Title = displayName;
//iterate over results, if object has the property value of what's currently being iterated over
//create a new TreeView object for it
treeView.Children = results.Where(x => x.GetType().GetProperty(groupedOn).GetValue(x, null) == i)
.Select(n => new TreeView
{
Title = displayName,
Children = x <--no idea what to do here
});
}
}
}
, 나는이 ToTree
확장 방법을 싶습니다하지만 처음에 나는이에 대한 몇 가지 포인터를 좀하고 싶습니다 : 여기 내 시도입니다. 내가 제대로 이해한다면 감사합니다 :)
을 이해하면 나는, 그러나 확실하지 않다 두 개 이상의 레벨 - 그룹 값의 한 레벨과 "현재"값을 가진 모든 아이템의 다음 레벨? 그렇다면 재귀 적 방법은 잔인합니다. 간단한'results.GroupBy (...) '또는 유사한 것을 사용하여 항목을 그룹으로 분리하십시오. – Sphinxxx