从第二种形式填充DataGridView

时间:2013-12-20 12:43:43

标签: c# winforms datagridview

我需要在正确的方向上进行一些指导,以解决这个小问题。

我有两种形式。在Form1上,我有空dataGridView1和一个名为btnAdd的按钮。当用户单击该按钮时,将显示Form2(From2.ShowDialog())。在这个form2上我有dataGridView2和一个按钮btn2。 Datagridview绑定到SQL表(它显示id和name列)。当用户在dataGridView中选择一行并单击btn2时,我需要将该行添加到dataGridView1中。我怎样才能做到最好。谢谢你的帮助。

这是我的一些代码。

// I show new form
private void btnAdd_Click(object sender, EventArgs e)
{
  Form2 form2 = new Form2();
  From2.Text = "some title text";
  form2.ShowDialog(this);
}

// In form2 I bind data to dataGridView2 and need to add
// selected item to dataGridView1
public Form2()
{
  InitializeComponent();
  getData();
}

private void getData()
{
  try
  {
    String connectionString = "my connection string";
    SqlConnection connection = new SqlConnection(connectionString);
    DataTable data = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter("my SQL query", connection);
    da.Fill(data);
    dataGridView2.DataSource = data;
  }
  catch (SqlException ex)
  {
    MessageBox.Show(ex.ToString());
  }
}

private void btn2_Click(object sender, EventArgs e)
{
  if (dataGridView2.SelectedCells.Count > 0)
  {
    int i = dataGridView2.SelectedCells[0].RowIndex;
    DataGridViewRow r = dataGridView2.Rows[i];
    //Need to add selected row to dataGridView1
  }
}

2 个答案:

答案 0 :(得分:1)

您可以使用所有者属性

Form2 form2 = new Form2(dataGridView1);
        From2.Text = "some title text";
form2.Owner=this;
        form2.ShowDialog(this);

在form2上;

((Form1)this.Owner).YOURMETHODTOADDROW(your parameter)

实施YOURMETHODTOADDROW将行添加到网格然后刷新grid1

答案 1 :(得分:0)

你可以将dataGridView1的引用传递给Form2,虽然这种事情可以很快让你的代码纠缠在一起。

public class Form1 : Form
{
    ...

    private void btnAdd_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2(dataGridView1);
        From2.Text = "some title text";

        form2.ShowDialog(this);
    }
}

public class Form2 : Form
{
    private DataGridView form1DataGridView;

    public Form2(DataGridView form1DataGridView)
    {
        InitializeComponent();

        this.form1DataGridView = form1DataGridView;

        getData();
    }

    private void btn2_Click(object sender, EventArgs e)
    {
       // do something with form1DataGridView
    }
}