سؤال

Please let me know if i can achieve based on the following scenario

So, if the user login as domain/dan.campbell then i need to sort the RadTreeView as in the following:

CAMPBELL, DAN

  • Nike
  • Puma

ANSTON, ERIC

  • Addidas
  • Puma

BRIAN, ERIC

  • Addidas
  • Puma

Based on the following code, the current tree is showing as in the following:

ANSTON, ERIC

  • Addidas
  • Puma

BRIAN, ERIC

  • Addidas
  • Puma

CAMPBELL, DAN

  • Nike
  • Puma

    protected void Page_Load(object sender, EventArgs e) { BuildTree(); SortClass(); }

        //Sort all RadTreeNode in Ascending
        public void SortClass()
        {
            SortNodes(treProduct.Nodes);
        }
    

    public void BuildTree() { EntityCollection collection = GetProduct(); treProduct.Nodes.Clear();

        ArrayList pgnodes = new ArrayList();
        RadTreeNode pnode = null;
        RadTreeNode snode = null;
    
        foreach (ProductEntity p in collection)
        {
            pnode = null;
            foreach(RadTreeNode n in pgnodes)
            {
               if(n.Text.Trim() == p.LastName.Trim().ToUpper() + "," +" " + p.FirstName.Trim().ToUpper())
               {
                  pnode = n;
                  break;
               }   
            } 
    
            if(pnode != null)
            {
                RadTreeNode productNode = new RadTreeNode(p.ProductName.toString());  
                pnode.nodes.Add(productNode);  
            }
            else
            {
               RadTreeNode userNode = new RadTreeNode(p.LastName.Trim().ToUpper() + "," +" " + p.FirstName.Trim().ToUpper());
    
               RadTreeNode productNode = new RadTreeNode(p.ProductName.toString()); 
               userNode.Nodes.Add(productNode);
               pgnodes.Add(userNode);   
            }
        }
    
        foreach(RadTreeNode pg in pgnodes)
        {
            treProduct.Nodes.Add(pg);
        }
        treProduct.CollapseAllNode();
    
    }
    
    
    
    
     /// <summary>
        /// The sort node is called for each node level sorting the child node
        /// </summary>
        /// <param name="collection"></param>
    
    public void Sort(RadTreeNodeCollection collection)
    {
            RadTreeNode[] nodes = new RadTreeNode[collection.Count];
            collection.CopyTo(nodes, 0);
            Array.Sort(nodes, new NodeSorter());
            collection.Clear();
            collection.AddRange(nodes);
    }
        /// <summary>
        /// SortNodes is a recursive method enumarating and sorting all area
        /// </summary>
        /// <param name="collection"></param>
    
    private void SortNodes(RadTreeNodeCollection collection)
    {
            Sort(collection);
    
            foreach (RadTreeNode node in collection)
            {
                if (node.Nodes.Count > 0)
                {
                    SortNodes(node.Nodes);
                }
    
            }
     }
        /// <summary>
        /// TreeNodeCOmpare define the sorting criteria
        /// </summary>
     public class NodeSorter : IComparer
     {
            public int Compare(object x, object y)
            {
                RadTreeNode tx = (RadTreeNode)x;
                RadTreeNode ty = (RadTreeNode)y;
    
                //if (tx.Text.Length != ty.Text.Length)
    
                //    return tx.Text.Length - ty.Text.Length;
                return string.Compare(tx.Text, ty.Text);
    
    
            }
    
      }
    
هل كانت مفيدة؟

المحلول

  public String FirstName
    {
        get
        {
            string firstName = null;
            string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Substring(1);
            string[] loginNameParts = userName.Split('\\');
            string loginNameWithoutDomain = loginNameParts[1];


            var names = loginNameWithoutDomain.Split('.');


            firstName = names[0];

            return firstName;

        }
    }
    public String LastName
    {
        get
        {
            string lastName = null;
            string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Substring(1);
            string[] loginNameParts = userName.Split('\\');
            string loginNameWithoutDomain = loginNameParts[1];


            var names = loginNameWithoutDomain.Split('.');

            lastName = names[1];


            return lastName;

        }
    }
    public void SortClass()
    {
        SortNodes(treProduct.Nodes);

        string nameToFind = LastName.Trim().ToUpper() + "," + " " + FirstName.Trim().ToUpper();
        var node = treProduct.FindNodeByText(nameToFind);
        if (node != null)
        {
            node.Remove();
            treProduct.Nodes.Insert(0, node);
            treProduct.Nodes[0].Expanded = true;
            treProduct.Nodes[0].ExpandChildNodes();
        }
    }

  public void Sort(RadTreeNodeCollection collection)
    {
        RadTreeNode[] nodes = new RadTreeNode[collection.Count];
        collection.CopyTo(nodes, 0);
        Array.Sort(nodes, new NodeSorter());
        collection.Clear();
        collection.AddRange(nodes);
    }
    /// <summary>
    /// SortNodes is a recursive method enumarating and sorting all area
    /// </summary>
    /// <param name="collection"></param>

    private void SortNodes(RadTreeNodeCollection collection)
    {
        Sort(collection);

        foreach (RadTreeNode node in collection)
        {
            if (node.Nodes.Count > 0)
            {
                SortNodes(node.Nodes);
            }

        }
    }
    /// <summary>
    /// TreeNodeCOmpare define the sorting criteria
    /// </summary>
    public class NodeSorter : IComparer
    {
        public int Compare(object x, object y)
        {
            RadTreeNode tx = (RadTreeNode)x;
            RadTreeNode ty = (RadTreeNode)y;

            //if (tx.Text.Length != ty.Text.Length)

            //    return tx.Text.Length - ty.Text.Length;
            return string.Compare(tx.Text, ty.Text);


        }

    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top