将Treeview的checkBox属性设置为true,要实现选中节点后,其子节点也被选中,并且在Datagridview中显示相应的记录也被选中(在记录前的复选框中打钩)

解决方案 »

  1.   

    TreeView的每个TreeNode(节点)都有一个Nodes集合的,Nodes又有一个Count属性.
    TreeView有一个AfterCheck事件.
    用遍历的方式,将其子节点的Checked设置为当前TreeNode的Checked值
    在AfterCheck中写:private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
        foreach (TreeNode tn in e.Node.Nodes)
        {
            tn.Checked = e.Node.Checked;
        }
    }
    要改变DataGridView中的记录选中标志,要看你的TreeView与DataGridView通过什么方式关连,即你节点对应DataGridView中的哪个列.
    同上面的方法,一样遍历DataGridView中的Rows集合中满足你的条件的Row,将这行Row对应的列的值改为TreeNode的Checked值.
    假如你的DataGridView的DataSource数据源为一个DataTable的DefaultView下面代码中,FieldName是你的DataGridView中的与TreeView的节点(假定是与Name属性关联)关联的列的名字,Checked是你的DataGridView中显示是否选中的标识字段(为Bool类型).下列代码同样加在上面的那个方法中.    DataView dv = (DataView)dataGridView1.DataSource;
        DataTable dt = dv.Table;
        foreach(DataRow dr in dt.Rows)
        {
            if (dr["FieldName"].ToString() == e.Node.Name)
                dr["Checked"] = true;
            else
                dr["Checked"] = false;    }
    以上代码没测试过,你自己可以测试一下.
      

  2.   


        DataView dv = (DataView)dataGridView1.DataSource;//取得DataGridView的数据源
        DataTable dt = dv.Table;//取得DataView所对应的DataTable
        foreach(DataRow dr in dt.Rows)  //对DataTable的每一个Row进行循环
        {
            //看当前Row的与TreeView关联的列的值是否等于当前节点的名字(也可以用节点的Text)
            if (dr["FieldName"].ToString() == e.Node.Name)
                //这句我不知道对不对.
                //如果当前Row的与TreeView关联的列的值等于节点的名字,则改DataTable中的标识列的值.
                dr["Checked"] = true;            
            else
                //这一句也不知道不对.你自己试下,就是改一个DataTable中某一行中某一列的值
                dr["Checked"] = false;     }
      

  3.   


    与NAME属性关联,NAME对应一个编号范围,即在这个范围内的记录前打钩