【问题标题】:Populate DataGridView from second form从第二种形式填充 DataGridView
【发布时间】:2014-01-09 07:59:04
【问题描述】:

我需要一些正确的方向来解决这个小问题。

我有两种形式。在 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
  }
}

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    您可以使用 Owner 属性

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

    在 form2 上;

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

    实现 YOURMETHODTOADDROW 将行添加到网格然后刷新您的网格1

    【讨论】:

    • 并将您的 YOURETHODTOADDROW 设置为公开
    【解决方案2】:

    您可以将 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多