2011-12-14 9 views
0

シナリオを簡単に説明してみましょう: 1)Form1には、dgv_EmployeeとsearchButtonという名前のdataGridViewがあります。 2)Form1のpageloadイベントに、dataGridViewを塗りつぶすコードがあります。ここでは、linqを使用してデータを入力しています(例:dgv_Employee.dataSource = Dbmlobject.Employee;) 3)searchButtonを押すたびに、新しいForm Form2が開き、入力。 4)検索ボタンをクリックすると、検索結果をdataGridViewとForm2に表示して閉じたいと思っています。form2を閉じるのに成功しました。フォーム2のform1のDataGridviewを更新できませんでした。子フォームのDataGridViewを更新する

私が3日間試しているように私を助けてください。

+0

質問を適切な判読可能な形式にしてください。ご使用の
タグを使用して、あなたの質問にラインを壊すようにしてください。 – Priyank

答えて

1

あなたの希望する出力を得るには、にイベントと委任をする必要があります。

例を挙げておきます。

Form1とForm2の2つのフォームがあるとします。

  • をForm1のDataGridView検索ボタンが含まれています。
  • Form2をはOKという名前テキストボックスボタンが含まれています。
  • DataGridViewのは、従業員名で満たされ、それが名前によって検索する必要があると仮定すると。
  • 検索ボタンを押したときにForm2が開き、フォーム2に従業員名を入力した後、ok butttonが押されると、従業員名が入力されたときにForm2が閉じられ、データがフィルタリングされます。説明する必要はありませんがやってコードの上にあるものを

    private void btnSearch1_Click(object sender, EventArgs e) 
    { 
        Form2 frm2 = new Form2(); 
        frm2.Show(); 
    } 
    

    :Form1の

コード:あなたは、以下のような何かを行うことができ、上記のようにその結果を取得する

。今< = :)
、Form2のため
コード:

public delegate void OnSearch(string employeeName); 

public partial class Form2 : Form 
{ 
    public event OnSearch OnSearchClick; 
    protected virtual void FireEvent(string employeeName) 
    { 
     if (OnSearchClick != null) 
     { 
      OnSearchClick(employeeName); 
     } 
    } 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void btnSearch_Click(object sender, EventArgs e) 
    { 
     string employeeName = txtEmp.Text; 
     FireEvent(employeeName); 

     this.Close(); 
    } 
} 

としては、私はあなたがイベントを使用してを委任し、ここではすべてのForm2である必要語りました。

Form2の
で文字列パラメータが含まれていますOnSearchという名前デリゲートあります。 イベントOnSearchClick、代議員OnSearchがあります。 ここでは、デリゲートがクラスレベルで配信されました。

次に、このメソッドが呼び出されたときにイベントのOnSearchClickをトリガするFireEvent関数が作成されます。
btnSearchボタンをクリックするとFireEventが呼び出されます。ここでemployeeNameがメソッドに渡されると、メソッド内でより多くのパラメータまたはオブジェクトを渡すことができ、Form1でそれを取得してフィルタを適用できます。今、あなたはFRM2を書くとき上記のようFROM1ため

private void btnSearch1_Click(object sender, EventArgs e) 
    { 
     Form2 frm2 = new Form2(); 
     frm2.OnSearchClick += new OnSearch(frm2_OnSearchClick); 
     frm2.Show(); 
    } 

    void frm2_OnSearchClick(string employeeName) 
    { 
     MessageBox.Show(employeeName); 
    } 

編集コード、: 今

Form1のコードを編集するための時間。 intellisenseあなたにイベントを与えるOnSearchClickそれを選択し、1つのスペースのタイプ+ =の後にタブを押すを押してください。上記のコードを表示できるので、frm2_OnSearchClickイベントが生成されます。

すべてのパラメータをForm2にForm1に渡します(私は1つだけ渡しました)。frm2_OnSearchClickイベントにDataGridViewをバインドするロジックを記述します。

は今、あなたは(Form2の上で)検索ボタンをクリックするたびに、それは(Form1の中にある)frm2_OnSearchClickイベントを発射し、DataGridViewのがリフレッシュされます。

+0

素敵な答えをありがとうございました。 – user650922

0

メソッドのグリッドにバインドを追加すると、イベントのどこでも簡単に呼び出すことができます。あなたの

searchButton click() 
{ 
Form2 form2 = new Form2(); 
form2.ShowDialog(); //Show Form2 
BindTogrid(); //Execute if Dialog has been closed; 
} 

・ホープ、このヘルプの下で続いて

private void BindTogrid() 
{ 
//call again you binding 
dgv_Employee.dataSource = Dbmlobject.Employee; 
} 

参考

0

グリッドをリフレッシュする必要があるときはいつでも、dataSourceを再割り当てしてください。

1
Form2 form2 = new Form2(); 

//add handler to catch when child form is closed  
form2.FormClosed += new FormClosedEventHandler(form2_FormClosed); 
form2.ShowDialog(); 


private void form2_FormClosed(object sender, FormClosedEventArgs e)   
{    
//when child form is closed, this code is executed 
// Bind the Grid view  
PopulateControls();         
} 
関連する問題