2016-09-23 5 views
0

Dies ist, was ich tun möchte. Es gibt eine Datagridview innerhalb eines Panels, dieses Panel befindet sich innerhalb eines TabPage innerhalb eines Tabcontrols und dieses Tabcontrol befindet sich in Form1.Kann nicht von Datagridview eine andere Form aktualisieren

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

Aus meiner Hauptform, nenne ich Form2 wie Form2.Show(), in dem der Benutzer Eingang etwas dann, wenn der Benutzer auf die Schaltfläche klicken kann sagen, „Änderungen speichern“, wird die Form 2 geschlossen und in das Form1, möchte ich das Datagrid aktualisiert werden. wenn der Benutzer auf die Schaltfläche in Form2 Änderungen speichern geklickt hat. Hier ist der Code:

In Form1:

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

    this.Hide(); 
} 

In der zweiten Form:

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(); 

    } 
} 

Der Fehler:

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

+1

[? Interaktion zwischen Forms - Wie aus einer anderen Form eine Steuerung eines Formulars ändern] (http://stackoverflow.com/a/38769212/3110834) –

Antwort

0
Form form1 = (Form)this.MdiParent; 

Sie dies ist Ihre Form 3 und nicht Formular 1. Sie benötigen eine Referenz Ihres Formulars 1.

In 2 Form müssen Sie etwas wie folgt aus:

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

Dann können Sie es aus form1 mit diesem Aufruf:

form3.show(this); 

hoffen, dass es Ihnen

helfen können
+0

Sir , ich verstehe es irgendwie nicht? Kannst du bitte weiter erklären? – PoorGrammer

+0

@PoorGrammer "Dies" ist ein Schlüsselwort, um die aktuelle Instanz der Klasse zu erhalten. Du nennst "this.MdiParent", also das ist die Referenz deiner Form3. So ist es klar, dass Sie eine null-Verweisausnahme Ursache erhalten gibt es keine gridview in form3. Sie benötigen eine Referenz Ihres Formulars1, in der sich Ihr Raster befindet. Um das Raster zu erhalten, müssen Sie die Referenz Ihres Formulars 1 an Ihr Formular 3 weiterleiten. – RisuRyu

+0

Also, Sir, was werde ich in öffentliche Form3 (Formularformular1) {} – PoorGrammer

0

Definieren Sie eine Funktion in Ihr erstes Formular:

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

Und es in der zweiten Form abzurufen:

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

Immer noch der gleiche Herr. Kapiert NULL-Verweis Ausnahme noch :( – PoorGrammer

+0

Sind Sie sicher, dass Sie es auf dem Datagridview erhalten Überprüfen Sie, ob 'form1' nicht null ist – stefankmitph

+0

Sir, wo bin ich bekam das Formular form1 = (Form) setzen this.MdiParent;?. var dataGridView = form1.GetDataGridView(); – PoorGrammer

Verwandte Themen