1

ページにテレリックツリービューを実装し、Webサービスを使用してノードにデータを入力しました。 ソースコードは次のようになります

    <telerik:RadTreeView ID="tvNodes" runat="server" EnableDragAndDrop="false" ExpandAnimation-Type="OutExpo" ExpandAnimation-Duration="800" EnableDragAndDropBetweenNodes="false" CollapseAnimation-Type="OutElastic" CollapseAnimation-Duration="800" Skin="Windows7" OnNodeDrop="tvNodes_HandleDrop" ClientNodePopulating="nodePopulating">
        <ContextMenus>
            <telerik:RadTreeViewContextMenu ID="NodesTreeMenu" runat="server" CssClass="MenuGroup" Skin="Windows7">
                <CollapseAnimation Type="none" />
            </telerik:RadTreeViewContextMenu>
        </ContextMenus>
        <WebServiceSettings Path="../ManageNode.asmx" Method="GetNodes">
        </WebServiceSettings>
    </telerik:RadTreeView>

Javascript

        function nodePopulating(sender, eventArgs) {
        var node = eventArgs.get_node();
        var context = eventArgs.get_context();
        SelectedType = '1'//selected node id.
        SearchText = ''
        context["ParentID"] = node.get_value();
        context["AllowDragAndDrop"] = allowDragDrop;
        context["SelectedType"] = SelectedType;
        context["SearchText"] = SearchText;
    }

ウェブメソッド

        [WebMethod]
    public RadTreeNodeData[] GetNodes(RadTreeNodeData node, object context)
    {
        IDictionary<string, object> contextDictionary = (IDictionary<string, object>)context;
        List<RadTreeNodeData> nodes = new List<RadTreeNodeData>();
        int parentID = Convert.ToInt32(contextDictionary["ParentID"]);
        bool AllowDragAndDrop = Convert.ToBoolean(contextDictionary["AllowDragAndDrop"]);
        int selectedType = Convert.ToInt32(contextDictionary["SelectedType"]);
        string SearchText = Convert.ToString(contextDictionary["SearchText"]);
        dsNodes = NodeBLL.GetAllRecordsByNodeDefinition(selectedType, parentID, SearchText.Trim());
        for (int rowCount = 0; rowCount < dsNodes.Tables[0].Rows.Count; rowCount++)
        {
            DataRow childRow = dsNodes.Tables[0].Rows[rowCount];
            RadTreeNodeData childNode = new RadTreeNodeData();
            if (Convert.ToInt16(childRow["StatusID"]) == Convert.ToInt16(Common.NodeStatus.Archieve))
            {
                childNode.Text = Common.DecodeXML(Convert.ToString(childRow["Name"])) + Common.deleteFlag;
            }
            else
            {
                childNode.Text = Common.DecodeXML(Convert.ToString(childRow["Name"]));
            }
            childNode.Value = Convert.ToString(childRow["ID"]);
            childNode.Attributes.Add(Common.virtualIDAtt, Convert.ToString(childRow["virtualID"]));
            childNode.Attributes.Add(Common.isVirtualExist, Convert.ToString(childRow["isVirtualExist"]));
            childNode.Attributes.Add(Common.NodeDefinitionID, Convert.ToString(childRow["NodeDefinitionID"]));
            childNode.Attributes.Add(Common.ParentNodeID, Convert.ToString(childRow["ParentID"]));
            childNode.Attributes.Add(Common.Position, Convert.ToString(childRow["Position"]));
            childNode.Attributes.Add(Common.NodeDefinition, Convert.ToString(childRow["NodeDefinition"]));

            childNode.ExpandMode = (Convert.ToInt32(childRow["ischildexists"]) > 0) ? TreeNodeExpandMode.WebService : TreeNodeExpandMode.ClientSide;
            nodes.Add(childNode);
        }
     return nodes.ToArray();
    }

展開矢印をクリックすると、javascript関数を介してWebメソッドが呼び出され、子ノードにデータが入力されます。完全に機能しました。親ノードに1000以上の子ノードがある場合、パフォーマンスに問題があります。ユーザーが展開をクリックしたときのようにバッチモードで実装したい矢印をクリックしてから、200 個の子ノードを読み込み、[ more ] ボタンをクリックしてから次の 200 個のノードを読み込みます。誰でもこの機能を実現するためのアイデアを持っていますか?

ありがとう、モメドサディク。

4

0 に答える 0