C# 子窗口有一个treeview,主窗口有一个dataGridView2,点击子窗口的树节点,就把节点的一个字段传到主窗口里的dataGridView呢, 
子窗口的代码已写,
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;namespace test2
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        //定义数据集,将树信息放入DataTable中
        DataSet ds = new DataSet();
        //树节点是否完全展开
        private bool isexpand = false;
        //选中的节点的id
        private int nodeid = -1;
        private TreeNode lastnode;
        //定义数据库的连接字符串
        //  private string connstr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=db.mdb;";
        private string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";        private void Form3_Load(object sender, EventArgs e)
        {
            tv_bind();
        }
        private void tv_bind()
        {
            try
            {
                //从数据库中读取分类信息至DataSet
                //绑定前先清空数据集
                ds.Clear();
                treeView1.Nodes.Clear();
                using (OleDbConnection conn = new OleDbConnection(connstr))
                {
                    using (OleDbDataAdapter da = new OleDbDataAdapter("select * from tree", conn))
                    {
                        da.Fill(ds, "tree");
                    }
                }
                //如果数据库中有信息那么构造树,否则提示无接点
                if (ds.Tables["tree"].Rows.Count > 0)
                {
                    //清除树节点,从根添加树
                    treeView1.Nodes.Clear();
                    Add_tree(0, (TreeNode)null);
                }
                else
                {
                    treeView1.Nodes.Clear();
                    TreeNode node = new TreeNode();
                    node.Text = "暂无任何分类信息";
                    treeView1.Nodes.Add(node);
                }
            }
            catch
            {
                treeView1.Nodes.Clear();
                TreeNode node = new TreeNode();
                node.Text = "暂无任何分类信息:请检查数据库连接是否正常";
                treeView1.Nodes.Add(node);
            }        }        //递归树
        private void Add_tree(int pid, TreeNode pnode)
        {
            DataRow[] dr = ds.Tables["tree"].Select("pid=" + pid);
            foreach (DataRow row in dr)
            {
                TreeNode node = new TreeNode();
                if (pnode == null)
                {
                    node.Text = row["nodename"].ToString();
                    node.Tag = row["id"].ToString();
                    treeView1.Nodes.Add(node);
                    Add_tree(int.Parse(row["id"].ToString()), node);
                }
                else
                {
                    node.Text = row["nodename"].ToString();
                    node.Tag = row["id"].ToString();
                    pnode.Nodes.Add(node);
                    Add_tree(int.Parse(row["id"].ToString()), node);
                }
            }
        }        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
                        }        }        private void button1_Click(object sender, EventArgs e)
        {
                    }
    }
}

解决方案 »

  1.   

    Form3中增加Form mainfrm;//用来保存主窗体对象
    public Form3(Form frm) //带参构造
    {
     InitializeComponent();
     this.mainfrm = frm;
    }主窗体中创建 Form3时
    Form3 frm = new Form3(this);接下来就可以通过mainfrm访问主窗体了,最简单的,将主窗体的控件的modifers属性设置为public,这样可以通过mainfrm.datagridview1来访问了
      

  2.   

    在主窗口定义一个公共属性,打开子窗口时
    var f = new Form3();
    f.Show(this);
    在 treeView1_NodeMouseClick 中
    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        主窗体 f = (主窗体)this.Owner;
        f.属性 = ......; 
    }
    在属性 set 访问器中定义处理传过来数据的代码