希望有人可以评论一种更有效的方法来做到这一点:我有一个代表用户待办事项列表的通用工作项列表。目前,这仅按截止日期排序并显示在 Obout Treeview 中,并且工作正常。
现在我们希望通过允许用户通过将主要和次要“过滤器”(即,按截止日期,然后按接收日期或类似的)应用到该树视图来对他们的待办事项列表进行排序,以便树视图显示主排序作为父排序,次排序作为子排序。实际项目将显示为孙子项目,如下所示:
Due Date
- Received Date
-- Work Item
-- Work Item
- Received Date
-- Work Item
Due Date
... ETC
据我所知,Obout Treeview 有一些关键的限制:
- 父节点必须在其子节点之前创建
- 节点一旦创建就不能删除
- 没有方法可以查看是否存在其他节点(父节点、兄弟节点、子节点),因此您无法以编程方式判断节点是否会在服务器端重复。
我正在修改一些旧代码,所以对我的例子要温柔。我不得不拿出很多东西来澄清它在做什么。
public void generateOboutTreeContent()
{
// Add unique root nodes.
switch (primarySort)
{
[...]
case SortOption.ByDueDate:
addNodesForDueDates(true);
break;
[...]
}
// Then add child nodes for each root node.
switch (secondarySort)
{
[...]
case SortOption.ByReceivedDate:
addNodesForReceivedDates();
break;
[...]
}
// Finally, add all the actual items as grandchildren.
foreach (WorkItem item in WorkQueue)
{
tree.Add(parentID, item.ID, item.url, false);
}
}
private void addNodesForDueDates(bool isRootNode = false)
{
var uniqueNodes = workQueue.GroupBy(i => i.DueDate).Select(group => group.First()).ToList();
foreach (classWorkItem node in uniqueNodes)
{
var dueDate = node.DueDate;
if (isRootNode)
{
tree.Add("root", dueDate, dueDate , false);
}
else
{
tree.Add(parentID, dueDate, dueDate, false);
}
}
}
我怎样才能更有效地从通用列表中为 Obout 树创建根优先层次结构,而一次又一次地遍历数据集以获取唯一值?
使用硬编码排序创建结构已经够麻烦了,但是尝试以一种干净利落地允许用户定义排序(没有子类或方法的爆炸式增长)的方式对其进行编码真的让我很难过。我很想听听任何建议!
谢谢你。