Я студент-программист, пытаюсь разработать свой первый реальный проект. Итак, у меня есть две таблицы с отношением «многие ко многим», вот они:
[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; }
Итак, первая таблица для участников, вторая - таблица для событий. Многие участники могут участвовать в мероприятии, и многие мероприятия могут иметь несколько участников. Пока все хорошо (я думаю?)
Итак, теперь у меня есть эта форма ниже. Поле со списком данных привязано к списку всех зарегистрированных событий, и после выбора события я хочу, чтобы в приведенной ниже таблице данных отображались все участники для указанного события, и, что более важно, обновленные или добавленные участники будут назначены для выбранного события.
Форма:
Теперь вот где я застрял, я не могу понять, как привязать данные к этой 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];
С обоими из них мне удалось заставить сетку отображать результаты, однако я не могу связать их с базой данных / сущностями ... Как правильно связать ее с базой данных, чтобы новые участники были зарегистрирован и связан с соответствующим событием? Спасибо!