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();
}
ない答え、BをSQLインジェクションを避けるためには、SqlCommandオブジェクトとSqlDataReaderオブジェクトを破棄し、パラメータを使用する必要があります。 – stuartd
EM.Show()を追加する必要があります。代わりにイベントを発生させることを検討して、フォームがテキストボックスを単独で更新できるようにしてください。 –
フォームはすでにアクティブになっているので、フォームを再度開きたくない –