我想以上述格式显示数据。孩子的数量是动态的。我怎么能通过使用递归函数或任何简单的方法来实现它。
答案 0 :(得分:1)
因为您没有指定数据格式,所以我只是说明了这个想法。伪代码:
class YourType
{
public List<YourType> Childs;
public string Name;
}
void recursiveMethod(List<YourType> parents)
{
foreach(YourType parent in parents)
{
Node parentNode = new Node(parent.Name);
treeView.Nodes.Add(parentNode);
if(parent.Childs.Count > 0) //we have child nodes
recursiveMethod(parent.Childs); //recursion
}
}
答案 1 :(得分:0)
有各种方法可以做到这一点。您可以指定源,可以是依赖属性或可观察集合,并绑定到它,或者您可以在不绑定的情况下执行此操作。如果你能使你的问题更具描述性,那将会有所帮助。
答案 2 :(得分:0)
以下是解决方案。事实上,它是
private TreeNode GenerateDataModel(TreeNode TrvNode, int PositionIndex) {
foreach (var grpData in ApplicationManager.GetGroupingInfo().Where(x => x.PositionIndex == PositionIndex)) {
string sectionQuery = Query + " Select Distinct(" + grpData.Fieldname + ") from DataTbl" +
(TrvNode == null ? string.Empty : " where " + TrvNode.Tag.ToString()) +
" order by " + grpData.Fieldname + " " + (grpData.OrderBy == GroupOrder.Descending ? "Desc" : string.Empty);
appMgr.ExecuteQuery(sectionQuery);
DataSet dSet = new DataSet();
appMgr.GetData(ref dSet);
foreach (DataRow dtRow in dSet.Tables[0].Rows) {
string con = string.Empty;
if (TrvNode != null)
con = TrvNode.Tag.ToString() + " And ";
TreeNode trvNode = new TreeNode() {
Text = dtRow[grpData.Fieldname].ToString(),
Tag = con + grpData.Fieldname + "='" + dtRow[grpData.Fieldname].ToString() + "'"
};
TreeNode retTreeNode = GenerateDataModel(trvNode, PositionIndex + 1);
if (TrvNode == null)
trvGroupDataModel.Nodes.Add(trvNode);
else {
TrvNode.Nodes.Add(trvNode);
}
}
}
return TrvNode;
}
这里的PositionIndex只是排序顺序索引。 对于前者
Select * from <Table> Order by P1 Desc, P2, P2
P1,P2和P3以0,1和2索引形式表示。