예제 #1
0
        private void softwareBindingSource_PositionChanged(object sender, EventArgs e)
        {
            UI.Models.Software current = ((ObjectView <UI.Models.Software>)softwareBindingSource.Current).Object;

            /* Sql
             * select DB.*
             * from [DataBase] DB
             * inner join SoftwareDataBase SDB on SDB.IdDataBase = DB.Id
             * where IdSoftware = 1;
             */
            /*Linq*/
            var q = context.Databases.Join(inner: context.SoftwareDatabases, outerKeySelector: data => data.Id,
                                           innerKeySelector: softwareDatabase => softwareDatabase.IdDataBase,
                                           resultSelector: (data, softwareDatabase) => new
            {
                data,
                softwareDatabase
            })
                    .Where(predicate: t => t.softwareDatabase.IdSoftware == current.Id)
                    .Select(selector: t => t.data).ToList();

            /**/
            var bindingListView = new BindingListView <DataBase>(list: q);

            dataBaseBindingSource.DataSource = bindingListView;
            dataGridView1.Refresh();
        }
예제 #2
0
        /// <summary>
        ///     Use case: приложению больше не нужна данная база её нужно удалить
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void RemoveDatabaseFromSoftwareBtn_Click(object sender, EventArgs e)
        {
            UI.Models.Software software            = ((ObjectView <UI.Models.Software>)softwareBindingSource.Current).Object;
            DataBase           dataBase            = ((ObjectView <DataBase>)dataBaseBindingSource.Current).Object;
            SoftwareDataBase   firstOrDefaultAsync =
                await context.SoftwareDatabases.FirstOrDefaultAsync(predicate : it => it.IdDataBase == dataBase.Id &&
                                                                    it.IdSoftware == software.Id);

            context.Remove(entity: firstOrDefaultAsync);
            await context.SaveChangesAsync();

            await Binding();

            SoftwareGridView.Refresh();
        }
예제 #3
0
        private async void AddSoftwareForUserBtn_Click(object sender, EventArgs e)
        {
            var idOc = ((ObjectView <OperatingSystem>)operatingSystemBindingSource.Current).Object.Id;

            try
            {
                //Проверки: не ввели значение для name, такое имя и операционная система уже существуют
                SoftwareNameTextBox.Validate("Ви не ввели назву додатку", out var name);
                UI.Models.Software nameExist =
                    await _context.Softwares.SingleOrDefaultAsync(software => software.Name.Equals(name) &&
                                                                  software.IdOperatingSystem == idOc);

                if (nameExist != null)
                {
                    throw new DuplicateNameException("Програма з таким ім'ям вже існує");
                }

                //Валидация прошла успешно
                //Создаём новое приложение, получаем пользователя, добавляем ему приложение, обновляем значение в бд и сохраняем
                var newSoftware = new UI.Models.Software {
                    IdOperatingSystem = idOc, IdUser = _userId, Name = name
                };
                await _context.Softwares.AddAsync(newSoftware);

                await _context.SaveChangesAsync();

                //Возвращаемся на главную
                this.Nav(new Main());
            }
            catch (FormatException formatException)
            {
                MessageBox.Show(formatException.Message, "Не коректні дані", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (DuplicateNameException duplicateNameException)
            {
                MessageBox.Show(duplicateNameException.Message, "Не коректні дані", MessageBoxButtons.OK,
                                MessageBoxIcon.Warning);
            }
        }