示例#1
0
 private int GetGroupIndex(cRsrcsNode root, string group)
 {
     foreach (cRsrcsNode n in root.Nodes)
     {
         if (String.Compare(n.Group, group) == 0)
         {
             return(n.Index);
         }
     }
     return(-1);
 }
示例#2
0
        private void InsertSoldier(int table, int index, string parsingString, cRsrcsNode parent, int deep, string nariad, string nariadGroup, bool kontrakt, bool free)
        {
            // Вспомогательные переменные:
            string group; // Ищем в parent группу с именем group:

            // Определяем, какого служащего добавляем. Свободного или нет:
            if (nariad == null) // Свободного:
            {
                group = GetGroupName(parsingString, deep);
                if ((deep == 0 && group == null) || (deep == 1 && group == null))
                {
                    return;
                }
                parent.Count++;    // Количество личного состава в поддереве.
                if (group == null) // значит элемент записываем в parent:
                {
                    if (table != -1)
                    {
                        naLico[table]++;
                    }
                    parent.Nodes.Add(new cRsrcsNode(deep, index, kontrakt, free));
                }
                else // Необходимо дальше искать группу для элемента:
                {
                    int ind = GetGroupIndex(parent, group);
                    if (ind == -1) // Группу с таким именем не нашли, создаем новую:
                    {
                        cRsrcsNode n = new cRsrcsNode(deep + 1, parent.Nodes.Count, kontrakt, free);
                        if (deep == 0)
                        {
                            table = parent.Nodes.Count; naLico.Add(0);
                        }                                                 // Добавление 'на лицо' для новой таблицы.
                        n.Group = group;
                        parent.Nodes.Add(n);
                        InsertSoldier(table, index, parsingString, n, deep + 1, nariad, nariadGroup, kontrakt, free);
                    }
                    else
                    {
                        if (deep == 0)
                        {
                            table = ind;
                        }                   // На лицо уже есть, передаем только индекс.
                        InsertSoldier(table, index, parsingString, parent.Nodes[ind], deep + 1, nariad, nariadGroup, kontrakt, free);
                    }
                }
            }
            else // Добавление столбцов с нарядами:
            {
                switch (deep)
                {
                case 0:
                    group = GetGroupName(parsingString, 0);
                    break;

                case 1:
                    group = nariadGroup;
                    break;

                case 2:
                    group = nariad;
                    break;

                default:
                    group = null;
                    break;
                }
                parent.Count++; // Количество личного состава в поддереве.
                if (group == null)
                {
                    parent.Nodes.Add(new cRsrcsNode(deep, index, kontrakt, free)); // ???.
                }
                else
                {
                    int ind = GetGroupIndex(parent, group);
                    if (ind == -1) // Группу с таким именем не нашли, создаем новую:
                    {
                        cRsrcsNode n = new cRsrcsNode(deep + 1, parent.Nodes.Count, kontrakt, free);
                        n.Group = group;
                        parent.Nodes.Add(n);
                        InsertSoldier(-1, index, parsingString, n, deep + 1, nariad, nariadGroup, kontrakt, free);
                    }
                    else
                    {
                        InsertSoldier(-1, index, parsingString, parent.Nodes[ind], deep + 1, nariad, nariadGroup, kontrakt, free);
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// Обновление расхода.
        /// </summary>
        public void UpdatePreview(bool updateGroups)
        {
            cRsrcsNode r = new cRsrcsNode(0, -1, false, false);

            wbPreview.DocumentText = r.GetHtml(tbTopic.Text, dgvSoldiers, dgvTasks, dtpFrom, cbMoney.Checked, clbGroups, updateGroups);
        }