如何通过AspxTreelist的焦点节点设置文本框文本

时间:2017-06-22 11:25:50

标签: c# asp.net webforms devexpress treelist

我有一个Treelist,我从一个值列表填充它。我也得到了选定的节点值。但是,当我想用​​该值设置此文本框时,我失败了。文本框中没有任何内容。如何通过此selectednode值填充文本框?

<dx:ASPxTreeList ID="ASPxTreeList1" runat="server" EnableTheming="True" Theme="Moderno" AutoGenerateColumns="True" KeyFieldName="ID" ParentFieldName="ReportsTo" Width="280px" 
                     ClientInstanceName="treeList" OnCustomDataCallback="treeList_CustomDataCallback" >
        <Columns>
            <dx:TreeListTextColumn FieldName="ProjectName" VisibleIndex="0">
            </dx:TreeListTextColumn>
            <dx:TreeListTextColumn FieldName="ReportsTo" VisibleIndex="3" Visible="False">
            </dx:TreeListTextColumn>
        </Columns>
        <Settings GridLines="Horizontal" ScrollableHeight="300" SuppressOuterGridLines="true" VerticalScrollBarMode="Visible" />
        <Settings ShowColumnHeaders="False" ShowTreeLines="False" />
        <SettingsBehavior AllowFocusedNode="True" />
        <ClientSideEvents CustomDataCallback="function(s, e) { document.getElementById('messageText').innerHTML = e.result; }"
                          FocusedNodeChanged="function(s, e) {
        var key = treeList.GetFocusedNodeKey();
        treeList.PerformCustomDataCallback(key);
    }" />

    </dx:ASPxTreeList>
        <dx:ASPxTextBox ID="txtSelectedNode" runat="server" Theme="Moderno" Width="170px">
    </dx:ASPxTextBox>
        <SettingsPager Mode="ShowAllNodes">
        </SettingsPager>
        <SettingsDataSecurity AllowDelete="False" AllowEdit="False" AllowInsert="False" />
    </dx:ASPxTreeList>


 protected void treeList_CustomDataCallback(object sender, TreeListCustomDataCallbackEventArgs e)
    {
        string key = e.Argument.ToString();
        TreeListNode node = ASPxTreeList1.FindNodeByKeyValue(key);
        if (!node.HasChildren)
        {             
            txtSelectedNode.Text = node.GetValue("ProjectName").ToString();
         }
    }

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。需要使用 OnCustomJSProperties 属性。我更新了我的代码块:

<dx:ASPxTreeList ID="ASPxTreeList1" runat="server" EnableTheming="True" Theme="Moderno" AutoGenerateColumns="True" KeyFieldName="ID" ParentFieldName="ReportsTo" Width="280px"
        ClientInstanceName="treeList" OnCustomJSProperties="TreeList_CustomJSProperties">
        <Columns>
            <dx:TreeListTextColumn FieldName="ProjectName" VisibleIndex="0">
            </dx:TreeListTextColumn>
            <dx:TreeListTextColumn FieldName="ReportsTo" VisibleIndex="3" Visible="False">
            </dx:TreeListTextColumn>
        </Columns>
        <Settings GridLines="Horizontal" ScrollableHeight="300" SuppressOuterGridLines="true" VerticalScrollBarMode="Visible" />
        <Settings ShowColumnHeaders="False" ShowTreeLines="False" />
        <SettingsBehavior AllowFocusedNode="True" />
        <ClientSideEvents FocusedNodeChanged="function(s, e) {
            var key = treeList.GetFocusedNodeKey();
            var value = treeList.cpNodes[key];
            txtNode.SetText(value);
    }" />
        <SettingsPager Mode="ShowAllNodes">
        </SettingsPager>
        <SettingsDataSecurity AllowDelete="False" AllowEdit="False" AllowInsert="False" />
    </dx:ASPxTreeList>
    <dx:ASPxTextBox ID="txtSelectedNode" ClientInstanceName="txtNode" runat="server" Theme="Moderno" Width="170px">
    </dx:ASPxTextBox>


protected void TreeList_CustomJSProperties(object sender, TreeListCustomJSPropertiesEventArgs e)
    {
        ASPxTreeList treeList = sender as ASPxTreeList;
        Hashtable nameTable = new Hashtable();
        foreach (TreeListNode node in treeList.GetAllNodes())
            if (!node.HasChildren)
            {
                nameTable.Add(node.Key, string.Format("{0}", node["ProjectName"]));
                e.Properties["cpNodes"] = nameTable;
            }
    }