【问题标题】:DataGridView Value to a textbox on an already Active FormDataGridView 值到已经活动表单上的文本框
【发布时间】:2016-10-05 11:44:51
【问题描述】:

Form1 有一个带有按钮的文本框,该按钮会调出 Form2,它是具有 DataGridView 的 Form3 的筛选器屏幕。当我双击 DataGridView Row 时,我需要它将一个值传递给 Form1 上的 TextBox(它将保持打开和活动状态)当我双击该行时,我可以获得正确的值以显示在 MessageBox 中,但我不能似乎传递了 Form1 的值。

表格1

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

【问题讨论】:

  • 不是答案,但您应该处理掉您的 SqlCommand 和 SqlDataReader 对象,并使用参数来避免 SQL 注入。
  • 如果你想看到它,你必须添加 EM.Show()。考虑引发一个事件,以便表单可以自行更新文本框。
  • 我不想再次打开表单,因为表单已经处于活动状态

标签: c#


【解决方案1】:

试试这个:

public void rowClick()
{
    // ...

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

    // ...
}

【讨论】:

  • 当我尝试这个时,我得到一个 System.NullReferenceException 错误。
  • 这成功了!我只需将其更改为 ((Employee_Maintenance)this.Owner),因为我将 Form3 的所有权授予了 Form1。感谢您的帮助!
  • 有利于您的更正!我要编辑答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多