Привязать DataGridView к таблицам отношений «многие ко многим»? - PullRequest
0 голосов
/ 31 марта 2020

Я студент-программист, пытаюсь разработать свой первый реальный проект. Итак, у меня есть две таблицы с отношением «многие ко многим», вот они:

    [Table("Participante")]
    public partial class Participante
    {
        public Participante()
        {
            this.Eventos = new HashSet<Evento>();
        }
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        [Required]
        public string Nome { get; set; }
        public string Endereco { get; set; }
        public DateTime? Data_de_Nascimento { get; set; }
        public string Telefones { get; set; }
        public string Email { get; set; }
        public virtual ICollection<Evento> Eventos { get; set; }
    }

    [Table("Evento")]
    public partial class Evento
    {
        public Evento()
        {
            this.Participantes = new HashSet<Participante>();
        }


        [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        [Required]
        [StringLength(100)]
        public string Nome { get; set; }
        public string Descricao { get; set; }
        public string Local { get; set; }
        public DateTime? Data { get; set; }

        public virtual ICollection<Participante> Participantes { get; set; }

Итак, первая таблица для участников, вторая - таблица для событий. Многие участники могут участвовать в мероприятии, и многие мероприятия могут иметь несколько участников. Пока все хорошо (я думаю?)

Итак, теперь у меня есть эта форма ниже. Поле со списком данных привязано к списку всех зарегистрированных событий, и после выбора события я хочу, чтобы в приведенной ниже таблице данных отображались все участники для указанного события, и, что более важно, обновленные или добавленные участники будут назначены для выбранного события.

Форма: The Form

Теперь вот где я застрял, я не могу понять, как привязать данные к этой DataGrid, чтобы отобразить участников для выбранного события в поле со списком, и я не знаю, как сделать так, чтобы новые участники были автоматически назначены для выбранного события.

О, и я использую Entity Framework 6, если это поможет.

Я также приветствую предложения различных подходов для решения этой проблемы.

РЕДАКТИРОВАТЬ

Прогресс !! Вроде ... Мне удалось заставить DataGrid отображать то, что я хотел, адаптировав ответ THIS к своему проекту на основе переменной eventID, которую можно установить с помощью выпадающего списка:

        using (var uow = new ZyonCliente1.UnitsOfWork.UnitOfWork())
        {
            IQueryable<Participante> query = uow.Participantes.GetAll().AsQueryable();
            var result = (from participantes in query
                          from eventos in participantes.Eventos
                          where eventos.ID == eventoid
                          select new
                          {
                              ParticipanteNome = participantes.Nome,
                              ParticipanteEndereco = participantes.Endereco,
                              ParticipanteData = participantes.Data_de_Nascimento,
                              ParticipanteTelefones = participantes.Telefones,
                              ParticipateEmail = participantes.Email,
                              ParticipanteEvento = eventos.Nome
                          }
                         );

            dataGridView1.DataSource = result;
        }

В результате DataGrid правильно отображает только те записи, которые я хочу. Тем не менее, он по-прежнему не привязан к самой базе данных и не будет вставлять или обновлять какие-либо записи ... Я также попробовал другой подход, который я нашел в ответе здесь, но сейчас я не могу найти ссылку на него:

        var select = "SELECT Participante.Nome, Participante.Email, Participante.Endereco, Participante.Telefones, Evento.Nome " +
        "FROM Participante INNER JOIN " +
        "ParticipanteEventoes ON Participante_ID = Participante.ID INNER JOIN " +
        "Evento ON Evento_ID = Evento.ID " +
        "WHERE Evento_ID = " + eventoid;
        var conn = Properties.Settings.Default.ClientesDatabaseConnectionString;
        var c = new SqlConnection(conn); // Your Connection String here
        var dataAdapter = new SqlDataAdapter(select, c);

        var commandBuilder = new SqlCommandBuilder(dataAdapter);
        var ds = new DataSet();
        dataAdapter.Fill(ds);
    //    dataGridView1.ReadOnly = true;
        dataGridView1.DataSource = ds.Tables[0];

С обоими из них мне удалось заставить сетку отображать результаты, однако я не могу связать их с базой данных / сущностями ... Как правильно связать ее с базой данных, чтобы новые участники были зарегистрирован и связан с соответствующим событием? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...