0

私はクライアントのプロジェクトに取り組んでいます。ここで、私が構築しているアプリは、ライブアプリケーションによって消費される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ツリービューを使用してデータを表示し、ユーザーがデータを操作できるようにしました(ノードの追加/削除、ドラッグアンドドロップによるノードの移動、またはノードとその基になる要素のコピー)。ここまでは順調ですね。

今、私のクライアントは、アイテムの要素要素をグループ化コンテナとして使用することがどういうわけか可能かどうかを知りたいと思っています。

したがって、現在、ツリービューは次のようになります。

category1
--Category1Item1
--Category1Item2

そして理想的には、次のようになります。

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

HierarchicalDataTemnplatesを読みましたが、Telerikが提供するASP.NETコントロールでこれらが機能するかどうかを理解できませんでした。これまでのところ、すでに何時間もの作業が行われているので、これまでの経験にこだわっていきたいと思います。

誰かがこの特定の問題に取り組む方法の正しい方向に私を向けることができれば幸いです。

前もって感謝します :)

ピーター

4

1 に答える 1

0

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();
        }
    }
于 2012-09-14T18:17:25.437 に答える