似乎是个久远的问题,但是本人是刚刚开始做winform(c#)项目,希望大家多多指点。 问题如下:
有两个窗体form1和form2
form1中有个dataGridView1和一个选择按钮button 但是开始的时候dataGridView1中是没有数据的
form2中也有个dataGridView1控件 dataGridView1中有数据
现在当单击form1中选择按钮的时候可以弹出form2窗体,单击form2窗体中的dataGridView1的任意一行可以取到该行数据对应的ID(已经实现)  现在的问题就是我如何根据这个id 把数据库中对应的记录绑定到form1的dataGridView1中 如果多次选择,就要把这几次选择的数据都绑定到form1中的dataGridView1中。
  说的比较长 ,不知道描述清楚没有。
  若有其他方法可以实现 不用dataGridView也行。

解决方案 »

  1.   

    你是每选择一行就得把数据绑到form1上,还是选了多条之后,关闭form2再绑定?
      

  2.   

    把FORM1的参数传到Form2,然后在FORM2中实现FORM1的值改变跟显示``
      

  3.   


    选择一条后就会关闭form2   想选择多条 就让他多次选择就行  这个我已经实现  就是不知道如何把值传回去 并绑定到form1的dataGridView中.
      

  4.   

    public delegate void chooseIDDelegate(int id);
    public class form2
    {public chooseIDDelegate chooseIDInstance;.....Gridview的choose事件中调用
    chooseIDInstance(id);}
    class form1
    {
    .....Gridview的choose事件中调用
    form2 f=new form2();
    f+=new chooseIDDelegate(chooseID_event);
    }public void chooseID_event(string ID)
    {
    针对得到的ID进行处理
    }
      

  5.   

    如果你用Form2.Show()的话,用delegate比较好。
    如果你用Form2.ShowDialog()的话,直接在Form2公开个属性,让Form1能访问到就可以了。Sample如下:
    Form1:
    #
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }     private void button1_Click(object sender, EventArgs e)
         {
             Form2 f2 = new Form2();
             f2.ShowDialog();
             // 从Form2里定义了SelectedIds属性,在ShowDialog之后取得
             DataTable data = new DataTable();
             data.Columns.Add("Id");
             f2.SelectedIds.ForEach(x => data.Rows.Add(new[] { x }));
             this.dataGridView1.DataSource = data;
         }
     }
    Form2:
    #public partial class Form2 : Form
    {
        //公开属性,只能get,不能在Form2以外进行set。
        public List<string> SelectedIds
        { get; private set; }    public Form2()
        {
            InitializeComponent();
        }    private void Form2_Load(object sender, EventArgs e)
        {
            var data = new DataTable();
            data.Columns.Add("Id");
            data.Columns.Add("Name");        data.Rows.Add(new[] { "001", "Test1" });
            data.Rows.Add(new[] { "002", "Test2" });
            data.Rows.Add(new[] { "003", "Test3" });
            data.Rows.Add(new[] { "004", "Test4" });
            data.Rows.Add(new[] { "005", "Test5" });        this.dataGridView1.DataSource = data;        this.dataGridView1.AllowUserToAddRows = false;
            this.dataGridView1.MultiSelect = true;
            this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }    private void button1_Click(object sender, EventArgs e)
        {
            SelectedIds = new List<string>();
            foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
                SelectedIds.Add(row.Cells[0].Value.ToString());
            this.Close();
        }
    }
      

  6.   

    winform间传值   
    通过公共静态类进行传值;  
    通过绑定事件进行传值;  
    使用Attribute  
    public partial class Form1 : Form  
      {  
      private void button1_Click(object sender, EventArgs e)  
      {  
      Form2 frm2 = new Form2();  
      frm2.Show(this);  
      }  
      }    public partial class Form2 : Form  
      {  
      private void button1_Click(object sender, EventArgs e)  
      {  
      Form1 frm1 = (Form1)this.Owner;  
      ((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;  
      this.Close();  
      }  
      }  
    form1中定义属性List<T> 在form2操作list
    循环查询获取datagridviewp
    rivate void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
      {}
      

  7.   

    有一个很简单的方法,在form2上定义一下DataTable,在关闭form2之前,把值赋给DataTable上,关闭form2在form1中调动form1中
    form2 dialog=new form2();
    if (dialog.ShowDialog() == DialogResult.OK)
    {
    DataTable dt=dialog.dt;
    }form2中
    DataTable dt;//全局变量
      

  8.   

    直接将值传过去后 根据这个唯一值是否存在 来激发按钮事件就OK了
     
    public partial class Form1 : Form   
      {   
      private void button1_Click(object sender, EventArgs e)   
      {   
      Form2 frm2 = new Form2();   
      frm2.Show(this);   
      }   
      }     public partial class Form2 : Form   
      {   
      private void button1_Click(object sender, EventArgs e)   
      {   
      Form1 frm1 = (Form1)this.Owner;   
      ((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;   
      this.Close();   
      }   
      }   
      

  9.   

    form2中用DataTable 存储数据 每次点击 就向DataTable中添加一行数据 然后重新绑定一下datagridview
      

  10.   

    谢谢大家的回答 我在主窗体中定义了一个datatable 之后用ShowDialog弹出窗体 这中方法实现了 我在试试委托 先结贴!