Как обновить datagridview когда заключительная дочерняя форма?

У меня есть dgv на моей основной форме, существует кнопка, которая открывает другую форму для вставки некоторых данных в источник данных, ограниченный к dgv. Я хочу, когда дочерняя форма закрывает dgv автоматическое обновление. Я пытался добавить это в дочерней форме заключительное событие, но это не обновляется:

private void frmNew_FormClosing(object sender, FormClosingEventArgs e)
        {
            frmMain frmm = new frmMain();

            frmm.itemCategoryBindingSource.EndEdit();
            frmm.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
            frmm.dataGridView1.Refresh();
        }

Однако, когда я добавляю этот код в кнопке на родительской форме, он на самом деле добивается цели:

        this.itemCategoryBindingSource.EndEdit();
        this.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
        this.dataGridView1.Refresh();
21
задан AMissico 7 March 2010 в 09:37
поделиться

2 ответа

Есть много способов сделать это, но следующий - самый простой, и он сделает то, что вы хотите, и поможет вам начать.

  • Создайте публичный метод на главной форме.
  • Модифицируйте конструктор второй формы, чтобы он принимал главную форму.
  • Создайте экземпляр второй формы, передав ему объект главной формы.
  • При закрытии второй формы вызовите публичный метод объекта главной формы.

Form1

public partial class Form1 : Form {
    public Form1() {
        //'add a label and a buttom to form
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e) {
        Form2 oForm = new Form2(this);
        oForm.Show();
    }
    public void PerformRefresh() {
        this.label1.Text = DateTime.Now.ToLongTimeString();
    }
}

Form2

public class Form2 : Form {
    Form1 _owner;
    public Form2(Form1 owner) {
        _owner = owner;
        this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing);
    }
    private void Form2_FormClosing(object sender, FormClosingEventArgs e) {
        _owner.PerformRefresh();
    }
}
39
ответ дан 29 November 2019 в 20:43
поделиться

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

private void frmNew_FormClosing(object sender, FormClosingEventArgs e)
{
    this.itemCategoryBindingSource.EndEdit();
    this.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
    this.dataGridView1.Refresh();
}
0
ответ дан 29 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: