Uczę się Entity Framework (5.0 i VSExpress 2012) i mam prawdziwy problem wiążący moje zapytanie z danymi GridView w WinForm. Mam poniższy kod i wyświetla moje zapytanie w porządku po uruchomieniu aplikacji, ale nie wiem, co muszę zrobić, aby zaktualizować daneGridView po zmianie danych w podstawowej bazie danych. Jaki jest najlepszy sposób na zrobienie tego? Co ja tu robię źle?Dane wiążące zapytanie linq do datagridView w Entity Framework 5.0
private void Form1_Load(object sender, EventArgs e)
{
using(var ctx = new TimeKeepEntities())
{
var qLoggedIn = from r in ctx.tblTimeRecords
where (r.tblEmployee.Active && !r.ClockOut.HasValue) || System.Data.Objects.EntityFunctions.DiffDays(r.ClockOut, DateTime.Now)<30
select new { Name = r.tblEmployee.Last + ", " + r.tblEmployee.First, r.tblProject.ProjName, r.ClockIn, r.ClockOut };
dataGridView1.DataSource = qLoggedIn.ToList();
}
}
Zrobiłem to. Wiązanie było poprawne i mogłem edytować dane z datagridview, gdy użyłem przycisku zapisu z: context.SaveChanges(). Problem polega na tym, że muszę dodać nowy wiersz danych lub go usunąć. Tego rodzaju zmiany nie są odzwierciedlane w bazie danych podczas SaveChanges. Może zapomnę o pewnych ustawieniach ...? –
Mam ten sam problem @ AlejandrodelRío. Teraz mam zamiar spider wszystkie pytania i odpowiedzi, aby sprawdzić, czy to rozwiązałeś. Życz mi szczęścia! – Robino
@Robino Nie mam odpowiedzi na to pytanie, ale to podejście nie pomoże ci dodawać ani usuwać obiektów bezpośrednio z datagridview. Zamiast tego musisz utworzyć BindingList, gdzie ObjectToShowInDatagrid jest obiektem z atrybutami, które chcesz wyświetlić, i ma instancję jednostki bazy danych. Trzeba również dodać metodę notifyPropertyCHanged do wszystkich "zestawów". W ten sposób zmiany zostaną odzwierciedlone w obiekcie i bazie danych. Wyjaśnię to dalej w odpowiedzi. –