RadTreeNode根据用户登录重新排序,然后按字母顺序排序
本文关键字:排序 然后 顺序 用户 登录 新排序 RadTreeNode | 更新日期: 2023-09-27 18:05:33
请让我知道我是否可以实现基于以下场景
所以,如果用户登录为domain/dan。campbell然后我需要排序的RadTreeView如下所示:
坎贝尔,丹
- 耐克彪马
ANSTON,埃里克
- Addidas 彪马
布莱恩,埃里克
- Addidas 彪马
ANSTON,埃里克
- Addidas 彪马
布莱恩,埃里克
- Addidas 彪马
坎贝尔,丹
- 耐克彪马
保护无效Page_Load(对象发送者,EventArgs e){BuildTree ();SortClass ();}
//Sort all RadTreeNode in Ascending public void SortClass() { SortNodes(treProduct.Nodes); }
public void BuildTree(){EntityCollection = 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);
}
}