2016-09-23 10 views
0

これは私がしたいものです。パネル内にはdatagridviewがあり、このパネルはtabcontrol内のtabPage内にあり、このtabcontrolはForm1にあります。私のメインフォームから別のフォームからデータグリッドビューを更新できません

Form1 --> TabControl --> tabPage --> panel --> **DATAGRIDVIEW** 

、私は、ユーザーがユーザーがボタンをクリックすると、入力何かが「変更を保存」と言うことができます、フォーム2が閉じてになりますれる)(例えばForm2.ShowとしてForm2のを呼び出しますForm1、私は、DataGridを更新したい。ユーザーがForm2 Save Changesでボタンをクリックしたとき。 Form1ので

:2番目の形式では

private void btnEditItem_Click(object sender, EventArgs e) 
{ 
    Form3 form3 = new Form3(); 
    Form1 frm = this.MdiParent as Form1; 
    form3.Show(); 

    this.Hide(); 
} 

:ここにコードだ

private void flatButton1_Click(object sender, EventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Save Changes?", "Confirmation", MessageBoxButtons.YesNo); 
    if (dr == DialogResult.Yes) 
    { 

     Form form1 = (Form)this.MdiParent; 
     DataGridView dt = (DataGridView)form1.Controls["flatTabControl1"].Controls["tabPage5"].Controls["panelUpdateRequest"].Controls["dataGridRequestItemsUpdate"]; 
     dt.Rows[0].Cells[0].Value = "Plsss";** 

     this.Hide(); 
     form1.Show(); 

    } 
} 

エラー:

Datagridview dt = (DataGridView)..Null Reference Exception.

+1

[フォームの間の相互作用 - 別のフォームからフォームのコントロールを変更する方法?](http://stackoverflow.com/a/38769212/3110834) –

答えて

0
Form form1 = (Form)this.MdiParent; 

あなたのこれはあなたのフォーム3であり、フォーム1を参照してください。フォーム1の参照が必要です。

あなたはこのような何か必要なフォーム2では

public From3(Form1 form) 
{ 
// save the reference of the form 1 in form 3 to use it 
} 

次に、あなたはこれでForm1のからそれを呼び出すことができます。

form3.show(this); 

はそれがで関数を定義し、あなたに

+0

卿、私はちょっとそれを取得しないでください?もっと詳しく説明できますか? – PoorGrammer

+0

@PoorGrammer "this"は、クラスの現在のインスタンスを取得するためのキーワードです。あなたは "this.MdiParent"と呼ぶので、これはあなたのform3の参照です。 したがって、form3にはgridviewが存在しないため、null参照例外が発生することは明らかです。あなたのグリッドがあるあなたのform1の参照が必要です。 グリッドを取得するには、フォーム1の参照をフォーム3に渡す必要があります。 – RisuRyu

+0

公開しているForm3(form1フォーム){}内に何を入れますか? – PoorGrammer

0

を助けることができると思いますがあなたの最初のフォーム:

public DataGridView GetDataGridView() 
{ 
    return this.dataGridRequestItemsUpdate; 
} 

そして二番目の形式でそれを取得:

Form form1 = (Form)this.MdiParent; 
var dataGridView = form1.GetDataGridView(); 
+0

まだ同じです。そのヌル参照例外がまだ残っています:( – PoorGrammer

+0

あなたは本当にDataGridViewでそれを取得しますか? 'form1'がnullでないかどうかを確認してください – stefankmitph

+0

Sir、Formを置く必要がありますform1 =(form)this.MdiParent; var dataGridView = form1.GetDataGridView(); – PoorGrammer

関連する問題