2016-05-13 4 views
0

LayoutControlGroupがあります。LayoutControlGroupはほとんどありません。実行時に別のLayoutControlGroup内のLayoutControlGroupを並べ替える

実行する必要があるのは、実行時に特定の順序に並べ替えることです。例えばちょうど逆、

[Group0] 
[Group1] 
[Group2] 
[Group3] 
[Group4] 

そして私は、DBから一部のデータを取得し、そのデータに応じてグループを並べ替える必要があります。フォームが現れたときに

例えば

は、私はそのような順序でこれらのグループを持っていますオーダー:

[Group4] 
[Group3] 
[Group2] 
[Group1] 
[Group0] 

私はすでに試したこと:毎回しかし

List<BaseLayoutItem> currentOrder = lcgParentGroup.Items.Cast<object>().Where(c => c is BaseLayoutItem).Cast<BaseLayoutItem>().Where(c => c.Name.StartsWith("lcgInnerGroup") && char.IsDigit(c.Name.Last())).ToList(); 
currentOrder.Sort((x, y) => System.Collections.Comparer.Default.Compare(x.Location.Y, y.Location.Y)); 

// Example order 
List<BaseLayoutItem> requiredOrder = new List<BaseLayoutItem>(currentOrder); 
requiredOrder.Reverse(); 

for (int i = 1; i < requiredOrder.Count; ++i) 
{ 
    // I just move every group after every relative group. 
    BaseLayoutItem relative = lcgParentGroup.Items.FindByName(requiredOrder[i - 1].Name); 

    DevExpress.XtraLayout.Customization.LayoutItemDragController dragController = new DevExpress.XtraLayout.Customization.LayoutItemDragController(requiredOrder[i], relative, MoveType.Outside, InsertLocation.After, LayoutType.Vertical); 
    bool result = requiredOrder[i].Move(dragController);  
} 

resultfalseです。

他の方法はありますか?

答えて

0

私はそれを理解しました。グループを移動するには、グループをVisibile(Visibility.Always)にする必要があります。なぜダニー?

溶液擬似コード:

try 
{ 
    groups.BeginUpdate(); 

    List<object> dataFromDB = ...; 

    // Znamy aktualną kolejność grup 
    List<BaseLayoutItem> currentOrder = groups.Items.Cast<object>().Where(c => c is BaseLayoutItem).Cast<BaseLayoutItem>().ToList(); 

    // Sort as visibile in form 
    currentOrder.Sort((x, y) => System.Collections.Comparer.Default.Compare(x.Location.Y, y.Location.Y)); 

    // Save old visibilities 
    LayoutVisibility[] allVisibilities = currentOrder.Select(x => x.Visibility).ToArray(); 
    currentOrder.ForEach(x => x.Visibility = LayoutVisibility.Always); 

    List<BaseLayoutItem> requiredOrder = ...; // prepare required order 

    // Make requiredOrder[0] topmost group 

    // Move 
    for (int i = 1; i < requiredOrder.Count; ++i) 
    { 
     BaseLayoutItem relative = groups.Items.FindByName(requiredOrder[i - 1].Name); 
     BaseLayoutItem toMove = groups.Items.FindByName(requiredOrder[i].Name); 

     toMove.Move(relative, InsertType.Bottom); 
    } 

    // Restore visibilities 
    for (int i = 0; i < currentOrder.Count; ++i) 
    { 
     currentOrder[i].Visibility = allVisibilities[i]; 
    } 

} 
finally 
{ 
    groups.EndUpdate(); 
} 
関連する問題