2016-10-05 20 views
0

Form1には、DataGridViewを持つForm3のフィルタ画面であるForm2を表示するボタン付きのテキストボックスがあります。 DataGridView行をダブルクリックすると、Form1のTextBoxに値を渡す必要があります(これは開いた状態とアクティブ状態のままです)。行をダブルクリックするとMessageBoxに表示する正しい値を取得できますが、 Form1の値を渡しているようです。DataGridView既にアクティブなフォームのテキストボックスの値

をForm1

private void btnDepartmentSearch_Click(object sender, EventArgs e) 
Employee_Department_Search_Filters EDSF = new Employee_Department_Search_Filters(); 
EDSF.Owner = this; 
EDSF.Show(); 

Form2が

private void search() 
    { 
     Employee_Department_Search_Results EDSR = new Employee_Department_Search_Results(); 
     EDSR.Owner = this.Owner; 

     string departmentContains = tbDepartment.Text; 

     adapt = new SqlDataAdapter("select uid_department, str_code AS [Department Code], str_name AS [Department Name] from tbl_department where str_name like '%" + departmentContains + "%'", conString); 
     ds = new System.Data.DataSet(); 
     adapt.Fill(ds, "Department"); 
     EDSR.dgvDepartmentSearch.DataSource = ds.Tables[0]; 

     EDSR.dgvDepartmentSearch.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
     EDSR.dgvDepartmentSearch.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
     EDSR.dgvDepartmentSearch.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 

     EDSR.dgvDepartmentSearch.Columns[0].Visible = false; 

     this.Close(); 

     EDSR.ShowDialog(this.Owner); 
    } 

フォーム3

public void rowClick() 
    { 
     Employee_Maintenance EM = new Employee_Maintenance(); 

     SqlConnection conn = new SqlConnection(myconnection); 
     conn.Open(); 
     SqlCommand comm = new SqlCommand("select str_code from tbl_department where uid_department = " + dgvDepartmentSearch.SelectedCells[0].Value, conn); 
     SqlDataReader read = null; 
     read = comm.ExecuteReader(); 

     while(read.Read()) 
     { 
      departmentCode = read["str_code"].ToString(); 
     } 

     EM.txtDepartment.Text = departmentCode; 

     conn.Close(); 
     this.Close(); 
    } 
+0

ない答え、BをSQLインジェクションを避けるためには、SqlCommandオブジェクトとSqlDataReaderオブジェクトを破棄し、パラメータを使用する必要があります。 – stuartd

+0

EM.Show()を追加する必要があります。代わりにイベントを発生させることを検討して、フォームがテキストボックスを単独で更新できるようにしてください。 –

+0

フォームはすでにアクティブになっているので、フォームを再度開きたくない –

答えて

0

これを試してみてください:

public void rowClick() 
{ 
    // ... 

    ((Employee_Maintenance)this.Owner).txtDepartment.Text = departmentCode; 

    // ... 
} 
+0

これを試してみると、System.NullReferenceExceptionエラーが発生します。 –

+0

これはうまくいった!私はForm1の所有権をForm1に与えたので、これを(Employee_Maintenance)this.Ownerに変更するだけです。助けてくれてありがとう! –

+0

あなたの修正のために良い!私は答えを編集するつもりです。 – dbardelas

関連する問題