【问题标题】:XML and Telerik RadTreeview - HierarchicalDataTemplateXML 和 Telerik RadTreeview - HierarchicalDataTemplate
【发布时间】:2012-05-06 18:17:31
【问题描述】:

我正在为客户开发一个项目,我正在构建的应用程序将用于编辑实时应用程序使用的 XML 文件。该应用程序是用 Flash 编写的,而且非常不稳定,所以我有点卡在不太理想的 XML 设置上。

XML 的组成(简化)如下:

<MenuItem id="1" label="category1">
   <Description>Description for Category 1</Description>
   <Image>Image for category 1</Image>
   <Item label ="Category1Item1">
      <Price>12.99</Price>
      <Type>Wood</Type>
      <additionalElementsHere />
   </Item>
   <Item label ="Category1Item2">
      <Price>112.99</Price>
      <Type>Stone</Type>
      <additionalElementsHere />
   </Item>
   <AdditionalItemsHere />
</MenuItem>
<AdditionMenuITemsHere />

我一直在使用绑定到 XMLDataSource 的 Telerik 树视图来显示数据并允许用户与之交互(添加/删除节点,通过拖放移动节点,或复制节点和底层元素)。到现在为止还挺好。

现在我的客户想知道是否可以将 Item 元素的 Element 用作分组容器。

所以目前树视图看起来像这样:

category1
--Category1Item1
--Category1Item2

理想情况下,它最终应该是这样的:

category1
--Wood
----Category1Item1
----Category1Item123
--Stone
----Category1Item2
----Category1Item456

我阅读了 HierarchicalDataTemplates,但还没有弄清楚这些是否适用于 Telerik 提供的 ASP.NET 控件。我想尝试并坚持我目前所拥有的,因为到目前为止,该产品已经投入了很多时间。

如果有人能指出如何解决这个特定问题的正确方向,我将不胜感激。

提前致谢:)

彼得

【问题讨论】:

    标签: c# asp.net xml telerik hierarchical-data


    【解决方案1】:

    Telerik 的团队提供了以下解决方案来解决问题:

            protected void treeViewRearrange(RadTreeView tvw) {
            foreach (RadTreeNode menuItem in tvw.Nodes) {
                List<RadTreeNode> itemTypes = new List<RadTreeNode>();
                foreach (RadTreeNode item in menuItem.Nodes) {
                    foreach (RadTreeNode typeElement in item.Nodes) {
    
                        var type = itemTypes.FirstOrDefault(x => x.Text == typeElement.Text);
                        if (type == null) {
                            type = new RadTreeNode(typeElement.Text);
                            itemTypes.Add(type);
                        }
    
                        RadTreeNode copyOfitem = item.Clone();
    
                        // Hide all existing sub types
                        for (int i = 0; i < copyOfitem.Nodes.Count; i++) {
                            copyOfitem.Nodes[i].Visible = false;
                        }
    
                        type.Nodes.Add(copyOfitem);
                    }
                }
                menuItem.Nodes.Clear();
                menuItem.Nodes.AddRange(itemTypes);
                tvw.ExpandAllNodes();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-22
      • 2011-12-10
      • 2016-09-30
      • 2010-12-20
      • 2011-12-09
      • 2012-09-19
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多