Beispiel #1
0
 private void BuildTree()
 {
     _index.Clear();
     try
     {
         tvRooms.AfterSelect -= tvRooms_AfterSelect;
         tvRooms.BeginUpdate();
         tvRooms.Nodes.Clear();
         // добавим корневой узел
         var hotelNode = new FloorTreeNode("Гостиница");
         tvRooms.Nodes.Add(hotelNode);
         // сформируем группы номеров по этажам
         foreach (var floors in _hotel.Rooms.OrderBy(f => f.Floor).GroupBy(f => f.Floor))
         {
             // добавляем узлы этажей
             var floorNode = new TreeNode(string.Format($"{floors.Key} этаж"));
             hotelNode.Nodes.Add(floorNode);
             foreach (var categories in floors.GroupBy(c => c.IdCategory).OrderBy(c => _hotel.Categories[c.Key].NameCategory))
             {
                 // добавляем узлы категорий
                 var categoryNode = new TreeNode(_hotel.Categories[categories.Key].NameCategory);
                 floorNode.Nodes.Add(categoryNode);
                 foreach (var room in categories.OrderBy(r => r.RoomNumber))
                 {
                     // количество занятых мест в номере
                     var count  = _hotel.RoomUsed(room, dtpArrivalDate.Value, dtpDepartureDate.Value);
                     var status = room.NumberSeat == count
                         ? "(занят)"
                         : count != 0
                               ? string.Format($"(ещё: {room.NumberSeat - count})")
                               : "";
                     // добавляем узлы номеров
                     var roomNode = new TreeNode(string.Format($"{room.RoomNumber} {status}"))
                     {
                         Tag = room
                     };
                     _index.Add(room, roomNode);
                     categoryNode.Nodes.Add(roomNode);
                 }
             }
         }
     }
     finally
     {
         tvRooms.EndUpdate();
         tvRooms.AfterSelect += tvRooms_AfterSelect;
     }
     // раскрываем все узлы этажей
     tvRooms.ExpandAll();
 }
Beispiel #2
0
 /// <summary>
 /// Заполнение "дерева" номеров по этажам
 /// </summary>
 private void BuildTreeAndFillTable()
 {
     _floor = 0; // сбрасываем номер выбранного этажа
     // запрет кнопок на изменение и удаление номера
     tsbChangeRoom.Enabled = tsbDeleteRoom.Enabled = false;
     // обработчик выбора узла отключим на время заполнения дерева
     tvFloors.AfterSelect -= tvFloors_AfterSelect;
     try
     {
         tvFloors.Nodes.Clear();
         // добавим корневой узел
         var hotelNode = new FloorTreeNode("Гостиница");
         tvFloors.Nodes.Add(hotelNode);
         // сформируем группы номеров по этажам
         foreach (var floor in Rooms.OrderBy(f => f.Floor).GroupBy(f => f.Floor))
         {
             // добавляем узы этажей
             var floorNode = new FloorTreeNode(string.Format($"{floor.Key} этаж"))
             {
                 Floor = floor.Key
             };
             hotelNode.Nodes.Add(floorNode);
         }
         // раскрываем все узлы этажей
         tvFloors.ExpandAll();
         // устанавливаем размер виртуальной таблицы
         dgvRooms.RowCount = Rooms.Count;
         // просим перерисовать таблицу
         dgvRooms.Invalidate();
     }
     finally
     {
         // подключаем обработчик выбора узла
         tvFloors.AfterSelect += tvFloors_AfterSelect;
     }
 }