Odświeżenie danych w DataGridView

0

Witam,
Mam kłopot z odświeżaniem danych w DataGridView po dodaniu nowego rekordu.

Dodanie rekordu w Form2:

private void addDonorButton_Click(object sender, EventArgs e)
        {
            NewDonorFirstName = firstNametextBox.Text;
            NewDonorLastName = lastNametextBox.Text;
            NewDonorDateOfBirth = dateOfBirthmonthCalendar.SelectionEnd;
            NewDonorDateofRegistration = DateTime.Now;
            NewDonorBloodType = (BloodTypes)bloodTypecomboBox.SelectedValue;

            NewBloodDonorCreator newBloodDonorCreator = new NewBloodDonorCreator(BloodBankManager.context, NewDonorFirstName, NewDonorLastName, NewDonorDateOfBirth, NewDonorDateofRegistration, NewDonorBloodType);
            MessageBox.Show(NewDonorFirstName + " " + NewDonorLastName + " succesfully added.");
            this.bloodBankManager.updateDataGridView();
            this.Close();
            
        } 

Moja metoda odświeżająca w Form1:

 public void updateDataGridView()
        {
            
            
            dataGridView1.Update();
            dataGridView1.Refresh();
        }

Próbowałem różnych rozwiązań z Google'a, ale nic nie działało. Jakieś pomysły co zrobić, żeby po naciśnięciu addDonorButton DataGridView się odświeżyło?

0

Przecież w tym kodzie nie pokazałeś najważniejszego, dodawania rekordu.
Czemu NewBloodDonorCreator przyjmuje w konstruktorze chyba wszystkie właściwości klasy Donor zamiast całej klasy Donor? Przecież tak by było łatwiej.

0
dam1an napisał(a):

Przecież w tym kodzie nie pokazałeś najważniejszego, dodawania rekordu.

Racja, proszę bardzo:

public class NewBloodDonorCreator
    {
        BloodDonor newBloodDonor=new BloodDonor();
        BloodBankContext bloodBankContext;
        public NewBloodDonorCreator(BloodBankContext bloodBankContext,String firstName, String lastName, DateTime dateOfBirth, DateTime dateOfRegistration, BloodTypes bloodType)
        {
            this.bloodBankContext=bloodBankContext;
            newBloodDonor.FirstName = firstName;
            newBloodDonor.LastName = lastName;
            newBloodDonor.DateofBirth = dateOfBirth;
            newBloodDonor.DateOfRegistration = dateOfRegistration;
            newBloodDonor.BloodType = bloodType;

            bloodBankContext.BloodDonors.Add(newBloodDonor);
            bloodBankContext.SaveChanges();

            
        }
    } 
dam1an napisał(a):

Czemu NewBloodDonorCreator przyjmuje w konstruktorze chyba wszystkie właściwości klasy Donor zamiast całej klasy Donor? Przecież tak by było łatwiej.

Faktycznie, do zmiany :)

Chciałbym zapytać o coś jeszcze. Mianowicie zgodnie z tym kodem:

public class BloodBankContext: DbContext
    {
        public BloodBankContext() : base("BloodBankDatabase1") 
        {
            Database.SetInitializer<BloodBankContext>(new DropCreateDatabaseAlways<BloodBankContext>());
        }
        public DbSet<BloodDonor> BloodDonors { get; set; }
        public DbSet<BloodDonation> BloodDonations { get; set; }
            
    } 

za każdym odpaleniem aplikacji baza powinna powstawać od nowa. Tak się chyba jednak nie dzieje, przykładowym rekordom nadaję DateOfRegistration=DateTime.Now a i tak aplikacja wyświetla mi rekordy dodane o godzinie 18:08.

Klasa wprowadzająca przykładowe rekordy:

public class ExampleDataFiller
    {
        public BloodBankContext bloodBankContext;
        public List<BloodDonor> ExampleDonators;
        public ExampleDataFiller (BloodBankContext bloodBankContext)
        {
            this.bloodBankContext = bloodBankContext;
            ExampleDonators=new List<BloodDonor>();


            BloodDonor bloodDonor1 = new BloodDonor()
            {
                FirstName="Marcus",
                LastName="Wilkins",
                DateofBirth=new DateTime(1960, 10, 27),
                DateOfRegistration=DateTime.Now,
                BloodType=BloodTypes.ABRHminus,


            };
            ExampleDonators.Add(bloodDonor1);
            foreach (var donor in ExampleDonators)
            {
                bloodBankContext.BloodDonors.Add(donor);
                bloodBankContext.SaveChanges();
            } 

Być może pomijam gdzieś odświeżenie źródła danych dla mojego DataGridView?

Edit:
Ok, problemem wydaje się być poprawne podpięcie mojej bazy do DataGridView. Dodawanie rekordów działa, w MessagBoxie też poprawnie wyświetla nowe rekordy.
Jak w takim razie poprawnie podpiąć moją bazę do DataGridView?

0

Słabo znam WinForms, wolę WPF. Jedyne co mi przychodzi do głowy to czy jak ustawiasz DataSource to dajesz tam ToBindingList()?

0

Do tej pory dołączałem bazę za pomocą wizarda z DataGridView Properties, ale jak widać to nie działało jak powinno.

Teraz próbuję czegoś takiego:

bindingSource.DataSource = context.BloodDonors.Local.ToBindingList();
dataGridView1.DataSource = bindingSource;
             

ale żadne dane nie są ładowane.

1

Co to jest u Ciebie bindingSource?
Z tego co widzę w tutorialu to powinno być

dataGridView1.DataSource = context.BloodDonors.Local.ToBindingList();
0

@dam1an Dzięki, jesteś wielki :) Już wszystko działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1