私のメインフォームには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();
これを行うには多くの方法がありますが、以下は最も単純なものであり、必要なことを実行して開始します。
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();
}
}
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();
}
}
実際のメインフォームインスタンスに影響を与えていないメインフォームの新しいインスタンスを作成しています。あなたがする必要があるのは、あなたが言うボタンのクリックで機能するコードのように、メインフォーム自体でコードを呼び出すことです:
private void frmNew_FormClosing(object sender, FormClosingEventArgs e)
{
this.itemCategoryBindingSource.EndEdit();
this.itemsTableAdapter.Fill(myDatabaseDataSet.Items);
this.dataGridView1.Refresh();
}
すばらしい回答です。他の方法は次のようになります:
メソッドを呼び出して、gridVieWを更新します。
** _form1
_のrefreshMethod()
内で、datasource
をnull
に設定していることを確認してください**
_ if (System.Windows.Forms.Application.OpenForms["Form1"]!=null)
{
(System.Windows.Forms.Application.OpenForms["Form1"] as Form1).refreshGridView("");
}
_
この方法で進めることもできます。
Form_1とform_2があります。
私たちのものを持つメソッドは、form1リスト、dataGridView、comboBoxなど、必要なものすべてを埋めるメソッドです。
Form_1:
public fillComboBox()//Step 1. This is the method with your stuff in Form1
{
foreach(var item in collection myInfo)
{myComboBox.Items.Add(item)}
}
Form_2:
Form1 instanceForm1;//Step 2
public Form2(Form1 theTransporter)//Step 3. This the Form2 contructor.
{
InitializeComponent();
instanceForm1 = theTransporter;//Step 4
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
instanceForm1.fillComboBox();//Step 5 we call the method to execute the task updating the form1
}
それが役に立てば幸い...