DataGridView binded to a DataSet doesn't get updated from another form

37 views Asked by At

I need to update a Microsoft SQL table from another form and then update the main form + combobox which has a foreign key in its other SQL table. For some reason the data doesn't get written to the main form until you reopen the form or restart the program. Here is the main form code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DeparmentDB5
{
    public partial class GradeJournalForm : Form
    {
        public GradeJournalForm()
        {
            InitializeComponent();
        }

        private void gradeJournalBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.gradeJournalBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.departmentDataSet);
        }

        private void GradeJournalForm_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "departmentDataSet.Students". При необходимости она может быть перемещена или удалена.
            this.studentsTableAdapter.Fill(this.departmentDataSet.Students);
            // TODO: данная строка кода позволяет загрузить данные в таблицу "departmentDataSet.Academics". При необходимости она может быть перемещена или удалена.
            this.academicsTableAdapter.Fill(this.departmentDataSet.Academics);
            // TODO: данная строка кода позволяет загрузить данные в таблицу "departmentDataSet.Subjects". При необходимости она может быть перемещена или удалена.
            this.subjectsTableAdapter.Fill(this.departmentDataSet.Subjects);
            // TODO: данная строка кода позволяет загрузить данные в таблицу "departmentDataSet.GradeJournal". При необходимости она может быть перемещена или удалена.
            this.gradeJournalTableAdapter.Fill(this.departmentDataSet.GradeJournal);

        }

        private void button1_Click(object sender, EventArgs e)
        {
            AcademicsForm academicsForm = new AcademicsForm();
            academicsForm.Owner = this;
            academicsForm.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SubjectsForm subjectsForm = new SubjectsForm();
            subjectsForm.Owner = this;
            subjectsForm.ShowDialog();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            StudentsForm studentsForm = new StudentsForm();
            studentsForm.Owner = this;
            studentsForm.ShowDialog();
        }

        private void gradeJournalDataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

        }
    }
}

Child form:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DeparmentDB5
{
    public partial class AcademicsForm : Form
    {
        public AcademicsForm()
        {
            InitializeComponent();
        }

        private void academicsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.academicsBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.departmentDataSet);

        }

        private void AcademicsForm_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "departmentDataSet.Academics". При необходимости она может быть перемещена или удалена.
            this.academicsTableAdapter.Fill(this.departmentDataSet.Academics);

        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.academicsBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.departmentDataSet);          
            GradeJournalForm main = this.Owner as GradeJournalForm;
            if (main != null) 
            {
                main.academicsTableAdapter.Fill(this.departmentDataSet.Academics);
                main.academicsCombo.SelectedIndex = main.academicsCombo.Items.Count - 1;
            }
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Tried refreshing the combobox and the form - nothing Tried setting all elements in the main form to public - nothing

EDIT: Found a solution. Setting the datasource for a datacolumn instead of datagridview worked.

  private void button1_Click(object sender, EventArgs e)
  {
      this.academicsBindingSource.EndEdit();
      this.tableAdapterManager.UpdateAll(this.departmentDataSet);
      GradeJournalForm main = this.Owner as GradeJournalForm;
      if (main != null) //Если открыта форма 2 (Сотрудники). То обновляем comboBox1
      {
          main.departmentDataSet = this.departmentDataSet;

          main.dataGridViewComboBoxAcademics.DataSource = this.departmentDataSet.Academics;
          main.academicsCombo.DataSource = this.departmentDataSet.Academics;
          main.academicsTableAdapter.Fill(this.departmentDataSet.Academics);
          main.academicsCombo.SelectedIndex = main.academicsCombo.Items.Count - 1;
      }
      this.Close();
  }
0

There are 0 answers