Как сломаться после проверки / снятия галочки с узла в древовидном списке - PullRequest
0 голосов
/ 10 октября 2011

У меня маленькая проблема. Я должен реализовать логику для TreeList, который состоит из одного родителя и нескольких детей, сгруппированных в несколько групп по идентификаторам.

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

long callerGroup = -1L;

if (callerNode != null)
{
    var service = this.tlServices.GetDataRecordByNode(callerNode) as __ServiceInfo;

    if (service != null)
    {
        callerGroup = service.Group;
    }
}

Action<TreeListNodes> action = null;

action = (nodes) =>
{
    if (nodes != null && nodes.Count > 0)
    {
        foreach (TreeListNode node in nodes)
        {
            if (node.Level == 0 && !node.Checked)
            {
                node.Checked = true;
                break;
            }
            else
            {
                var service = this.tlServices.GetDataRecordByNode(node) as __ServiceInfo;

                if (service != null)
                {
                    var group = service.Group;

                    //for ' 1 <= group <= 100' -> Mandatory Service, only ONE from group
                    if (callerGroup >= 1 && callerGroup <= 100)
                    {
                        if (group >= 1 && group <= 100)
                        {
                            //node.Checked = true; - not done
                        }
                    }

                    //for ' 101 <= group <= 1000 ' -> Mandatory Service, minimum ONE from group, but allow and MORE
                    if (callerGroup >= 101 && callerGroup <= 1000)
                    {

                    }

                    //for ' group >= 1001 ' -> optional Service, ALL from group
                    if (callerGroup >= 1001 && group >= 1001)
                    {
                        node.Checked = !node.Checked; // --> DONE. 
                    }
                }
            }
            action(node.Nodes);
        }
    }
};

action(this.tlServices.Nodes);

У меня есть 3 случая:

  • # 1. если 1 <= group <= 100 </em> -> Обязательный сервис, разрешить только ОДИН из группы
  • # 2. если 101 <= group <= 1000 </em> -> Обязательный сервис, разрешить минимум ОДИН из группы, но разрешить и БОЛЬШЕ
  • # 3. если группа> = 1001 -> дополнительная служба, установите / снимите флажок ВСЕ из группы.

Результат: # 3 Я сделал легко, но как я могу реализовать # 1.

1 Ответ

0 голосов
/ 11 октября 2011

для # 1 я нашел реализацию:

// для '1 <= group <= 100' -> обязательный сервис, только ОДИН из группы

if (callerGroup >= 1 && callerGroup <= 100)
                            {
                                if (group >= 1 && group <= 100)
                                {
                                    foreach (TreeListNode nd in nodes)
                                    {
                                        var svc = this.tlServices.GetDataRecordByNode(nd) as __ServiceInfo;
                                        long gr = svc.Group;

                                        if (gr == callerGroup && nd.Checked == true)
                                        {
                                            nd.Checked = false;
                                        }
                                    }
                                }
                            }`
...