1

私は2つのフォームを持っています。メインフォームと子フォーム。メイン フォームでは datagridview を表示し、子フォームではメイン フォームの datagridview にデータを挿入するフォームです。そのため、子フォームからデータを挿入した後、メイン フォームの datagridview を更新します。そのため、新しいデータが datagridview に表示されます。このコードを試しましたが、datagridview が更新されません。新しい datagridview を表示するには、アプリケーションを閉じてから再度開く必要があります...

public void button1_Click(object sender, EventArgs e)
    {
        string cstr = "server=localhost;User Id=root;database=sma9";
        con1 = new MySqlConnection(cstr);
        con1.Open();
        com1 = new MySqlCommand();
        com1.Connection = con1;
        com1.CommandType = CommandType.Text;
        com1.CommandText = "INSERT INTO tbukux (kodebuku,judulbuku,namakategori,pengarang,penerbit,tahunterbit,stokbuku) VALUES ('" + txtkode.Text + "','" + txtjudul.Text + "','" + txtkategori.Text + "','" + txtpengarang.Text + "','" + txtpenerbit.Text + "','" + txttahun.Text + "','" + txtstok.Text + "')";
        com1.ExecuteNonQuery();            
        con1.Close();
        Form1 form1 = new Form1();
        form1.gridbuku.RefreshEdit();                        
    }

私もこれを試しましたが、うまくいきません

public void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        string cstr = "server=localhost;User Id=root;database=sma9";
        con1 = new MySqlConnection(cstr);
        con1.Open();
        com1 = new MySqlCommand();
        com1.Connection = con1;
        com1.CommandType = CommandType.Text;
        com1.CommandText = "INSERT INTO tbukux (kodebuku,judulbuku,namakategori,pengarang,penerbit,tahunterbit,stokbuku) VALUES ('" + txtkode.Text + "','" + txtjudul.Text + "','" + txtkategori.Text + "','" + txtpengarang.Text + "','" + txtpenerbit.Text + "','" + txttahun.Text + "','" + txtstok.Text + "')";
        com1.ExecuteNonQuery();
        com2 = new MySqlCommand();
        com2.Connection = con1;
        com2.CommandType = CommandType.Text;
        com2.CommandText = "select * from tbukux";
        ds1 = new DataSet();
        adp1 = new MySqlDataAdapter(com2);
        adp1.Fill(ds1, "tbukux");
        form1.gridbuku.DataSource = ds1;
        form1.gridbuku.DataMember = "tbukux";
        con1.Close();            
        form1.gridbuku.Refresh();                        
    }
4

2 に答える 2

1

このような新しいイベントを frmNewBook に追加できます

public event System.Action NotifyAnotherForm

このイベントをメイン フォームの btnOpenForm_click の下に配置します。

frmNewBook form = new frmNewBook();
form.NotifyAnotherForm += new System.Action(mainForm_NotifyAnotherForm);
form.Show(); // or .ShowDialog();

メイン フォームには、このイベントを処理するメソッドが必要です。

public void mainForm_NotifyAnotherForm() {
    //put you code for update datagrid
}

frmNewBook で何らかの変更を行うと、適切な場所でイベントが実行されます

if (NotifyAnotherForm != null) {
   NotifyAnotherForm();
}

もっと簡単な方法なら、このようにしてみることができます

frmNewBook form = new frmNewBook();

//You code will pause until form.Show close
form.Show(); // or .ShowDialog();

//After frmNewBook close, code will continue running and you can put code to update
loadDataGrid();

SQL インジェクションを避けるために、SQL COMMAND にパラメータを入力してください。

于 2012-11-16T14:15:01.473 に答える
0

「使用する」を使用することもできます。

      public void button1_Click(object sender, EventArgs e)
    {
       frmChildForm ofrmchild = new frmChildForm();

            using(new frmChildForm())

        {
            ofrmchild .BringToFront();
            ofrmchild .ShowDialog();

        }
         loadDataGrid();  

   }
于 2014-01-23T14:06:29.090 に答える