请根据以下情况告诉我是否可以实现
因此,如果用户以domain / dan.campbell身份登录,那么我需要按照以下方式对RadTreeView进行排序:
CAMPBELL,DAN
ANSTON,ERIC
BRIAN,ERIC
根据以下代码,显示当前树,如下所示:
ANSTON,ERIC
BRIAN,ERIC
CAMPBELL,DAN
彪马
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);
}
}
答案 0 :(得分:0)
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);
}
}