Search code examples
c#asp.netwebformsdevexpresstreelist

How to set textbox text by AspxTreelist's focused node


I've a Treelist and i fill it from a List of values. I also get selected node value. However, when I want to set this text box by that value, I fail. There is nothing in textbox. How can I fill textbox by this selectednode value?

<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();
         }
    }

Solution

  • I've a solution for this. It is need to use OnCustomJSProperties property. I updated my code block like this:

    <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;
                }
        }