// Перенумерация OutlineNumber и OutlineLevel private static void ProcessRenumber(int AccountId, ArrayList children) { string OutlineNumber; int OutlineLevel; using (IDataReader reader = DBFinance.GetAccount(AccountId)) { reader.Read(); OutlineNumber = reader["OutlineNumber"].ToString(); OutlineLevel = (int)reader["OutlineLevel"]; } int pos = 0; foreach (int childId in children) { // Найдём всех внуков ArrayList grandChildren = new ArrayList(); using (IDataReader reader = DBFinance.GetListChildrenAccounts(childId)) { while (reader.Read()) { grandChildren.Add((int)reader["AccountId"]); } } // Обновим OutlineNumber pos++; string newNumber = String.Format("{0}.{1}", OutlineNumber, pos); DBFinance.UpdateOutlineLevelAndNumber(childId, OutlineLevel + 1, newNumber); // Рекурсия if (grandChildren.Count > 0) { ProcessRenumber(childId, grandChildren); } } }