2016-09-23 77 views
0

這就是我想要做的。在面板中有一個datagridview,這個面板位於tabcontrol內的一個tabPage中,並且這個tabcontrol位於Form1中。無法從其他表格更新datagridview

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

從我的主要形式,我稱之爲窗體2,如Form2.Show(),其中用戶將輸入的東西那麼如果用戶點擊按鈕讓說「保存更改」,該表2將關閉,在Form1,我想要更新數據網格。當用戶單擊Form2保存更改中的按鈕時。下面的代碼:

在Form1:

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。你需要一個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'是否不爲空 – stefankmitph

+0

先生,我必須把窗體form1 =(Form)this.MdiParent; var dataGridView = form1.GetDataGridView(); – PoorGrammer