Как изменить порядок узлов в UltraTree? - PullRequest
1 голос
/ 09 ноября 2011

У меня есть класс, который выглядит так:

public class GeneralStatusInfo
{        
    public List<string> List_BLNumber { get; set; }
    public List<POInfo> List_PONumbers { get; set; }
    public List<string> List_Pickup { get; set; }
    public List<string> List_Origin { get; set; }
    public List<string> List_Destination { get; set; }
    public List<string> List_NotifyName { get; set; }
    public List<AppmntInformation> List_Appointments { get; set; }
}

Когда я связываю данные следующим образом:

List<GeneralStatusInfo> statusBind = new List<GeneralStatusInfo>();
statusBind.Add(status);
utGeneralStatusInfo.DataSource = statusBind;

SetupTree(status);

Он размещает мои родительские узлы в другом порядке:

 Appointment 
 P/O Number 
 B/L Number 
 Origin 
 Pickup 
 Notify 
 Payment
 Destination

Как переупорядочить узлы, чтобы они выглядели в том же порядке, в котором они есть в моем классе?

1 Ответ

1 голос
/ 29 ноября 2011

Вы должны сделать свой собственный IComparer . Примерно так:

public class  GeneralStatusInfoMemberOrderComparer: IComparer
{
    public  GeneralStatusInfoMemberOrderComparer()
    {
        memberOrdermemberOrder.Add("B/L Number",0);
        memberOrdermemberOrder.Add("P/O Number",1);
        /// 
        /// add more items
        ///
    }

    private bool sortAlphabetically=false;
    private Dictionary<string,int> memberOrder  = new Dictionary<string,int>();

    public bool SortAlphabetically
    {
        get{return sortAlphabetically;}
        set{sortAlphabetically = value;}
    }

    int IComparer.Compare(object x, object y)
    {
        string propertyX = x as string;
        string propertyY = y as string;

        if (sortAlphabetically)
        {
            return propertyX.CompareTo(propertyY);
        }
        else
        {
            int orderX= memberOrder.ContainsKey(propertyX) ? memberOrder[propertyX] : -1;
            int orderY= memberOrder.ContainsKey(propertyY) ? memberOrder[propertyY] : -1;
            return orderX.CompareTo(orderY);
        }
    }
}

А затем просто установите SortComparer свойство вашего экземпляра UltraTree:

ultraTree1.SortComparer = new GeneralStatusInfoMemberOrderComparer();
...