C# 子窗口有一个treeview传值问题
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)
{
}
}
} --------------------编程问答-------------------- Form3中增加
Form mainfrm;//用来保存主窗体对象
public Form3(Form frm) //带参构造
{
InitializeComponent();
this.mainfrm = frm;
}
主窗体中创建 Form3时
Form3 frm = new Form3(this);
接下来就可以通过mainfrm访问主窗体了,最简单的,将主窗体的控件的modifers属性设置为public,这样可以通过mainfrm.datagridview1来访问了 --------------------编程问答-------------------- 在主窗口定义一个公共属性,打开子窗口时
var f = new Form3();
f.Show(this);
在 treeView1_NodeMouseClick 中
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
主窗体 f = (主窗体)this.Owner;
f.属性 = ......;
}
在属性 set 访问器中定义处理传过来数据的代码 --------------------编程问答-------------------- 能不能写详细点呢?
补充:.NET技术 , C#