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); }
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); } } } }
/// <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); }