2016-09-15 22 views
0

親フォームと子フォームがあります。子フォームからの親フォームの呼び出しメソッド親フォームのデータグリッドビューの再ロード

データグリッドビュー要素dgvが親フォームにあります。

親フォームがロードされると、dgvに行が追加されます。

行を作成するためのデータは、MySQLデータベースから取得されます。

親フォームのボタンが子フォームを読み込みます。

子フォームでDBテーブルの内容が変更され、dgvをリロードするために親メソッドが呼び出されるため、ユーザーは変更が完了してから子フォームを閉じます。私はそれが同じ形式であるとして地元のメソッドを呼び出して、デバッグの目的で作成した親フォーム内の別のボタンがあり

parentForm obj_parentform = new parentForm(); 
obj_parentform.loadGrid("from_child"); 

:親メソッドを呼び出す

子フォーム。

private void btn_debug_Click(object sender, EventArgs e) { 
    this.loadGrid("btn"); 
} 

方法:

### - caller: from_child 

しかし:子フォームの変更テーブル内のデータ、およびそれが親メソッドを呼び出しますが、私はコンソールの上映を見ることができる今

public void loadGrid(string caller) { 
     try { 
      this.dgv.Rows.Clear(); 
      Console.WriteLine("### - caller: " + caller); 

      string link = "database;datasource;port;username;password"; 

      MySqlConnection conn = new MySqlConnection(link); 
      String query = "SELECT * FROM table"; 
      MySqlCommand cmd = new MySqlCommand(query, conn); 
      conn.Open(); 
      MySqlDataReader dr = cmd.ExecuteReader(); 

      if(dr.HasRows) { 
       while(dr.Read()) { 
        this.dgv.Rows.Add(
         Convert.ToString(dr.GetValue(0)), 
         Convert.ToString(dr.GetValue(1)), 
         Convert.ToString(dr.GetValue(2)), 
         Convert.ToString(dr.GetValue(3)), 
         Convert.ToString(dr.GetValue(4)) 
        ); 
       } 
      } 

      cmd.Dispose(); 
      conn.Close(); 

     }catch(Exception ex) { 
      MessageBox.Show(ex.Message); 
     } 
    } 

dgvは同じ行を表示しますが、メソッドが入力されても変更は行われません。

はその後、私は、デバッグボタンを押すと、コンソールが表示さ:

### - caller: btn 

dgvがリロードされ、以前に子フォームから行われた変更は、現在示されています。

どちらの呼び出しもメソッドに入りますが、dgvはデバッグからメソッドにアクセスするときにデータをロードするのはなぜですかbtn

+0

(http://stackoverflow.com/questions/13231149/datagridview-not-updating-refreshing) – radarbob

答えて

1

私はこの問題を解決しました。子フォームを作成した瞬間に、親オブジェクト参照を子フォームに渡す必要がありました。

私はメソッドにアクセスするために新しいparentFormオブジェクトを作成していたので、この新しいオブジェクトは既にインスタンス化された親フォームオブジェクトではなかったため、期待通りに機能しなかったのです。私のデバッグを誤解させてしまった。

これはコードです:子フォームで

frm_childForm obj_childForm = new frm_childForm(this); 
obj_childForm.ShowDialog(); 

:親フォームで

は、その親への参照を保持するためのプロパティを作成します。

private parentForm obj_parentform = null; 

コンストラクタの親フォームへの参照を設定:

public constructor(parentForm parent) { 
    obj_parentform = parent; 
} 

今の子フォーム内からコール親メソッドをすることができます:

obj_parentform.loadGrid("child"); 
関連する問題