我想要实现上图所示的界面!每次点击左边的树上的第三层的节点的时候,都能把第三层节点相应的属性显示在右边的网格里。
分别用的是两个用户控件。一个用户控件里放的是TreeView,另外用户控件里用的是DataGridView,每次点击左侧树的时候就把相应的一个ID传给右侧的用户控件,在数据库里查了以后显示相应的属性。我想在左边的用户空间里写一个委托事件Update,在右边的用户控件里写好订阅这个委托的事件setNodeID用来重新使DataGridView绑定新的数据源,每次当点左边击节点的时候,在After_selected()事件里,先new一个右边的用户控件的实例,然后调用委托事件。但是现在不能实现啊,好像没反应啊??
下面是代码:
-------------------------------------------------------------------------------------------
左侧用户控件的:
  private void nodeTree_AfterSelect(object sender, TreeViewEventArgs e)
  {
                /*这里得到了当前鼠标点击的节点的ID*/    UCDataGridView ucDataGridView = new UCDataGridView();//new一个用户控件的实例    this.Update += new EventHandler(ucDataGridView.setNodeID);//把右边用户控件的方法订阅委托事件    Notify(nodeID);
  }    public delegate void EventHandler(int selectedNodeID);    public event EventHandler Update;//声明一个EventHandler类型的委托事件,名称为Update    private int nodeID;    public int NodeID
    {
        get { return nodeID; }
        set { this.nodeID = value; }
    }
   public void Notify(int newNodeID)//当selectedNodeID改变时,调用此方法,这个方法调用了Update这个委托事件,其分别把当前ID的值通知给另外两个控件。
   {
        nodeID = newNodeID;
   }大家谁有更好的方法或者可以帮我找找问题的?紧急求救!

解决方案 »

  1.   

    UCDataGridView ucDataGridView = new UCDataGridView();//new一个用户控件的实例
    你这里是new一个新的UserControl,根本就不是你右边那个控件,那又怎么可能更新呢
    在左边的控件中定义一个引用右边控件的属性,然后在Form中把右边控件的引用传给它
      

  2.   

    你是不是想传固定数目的值,如果想传入固定数目可以用string【】和arraylist的组合
    Arraylist arraylist=new Arraylist();
    Add方法加只,remove方法去值,
    每次对string【】数组赋值时都要初始化
    然后遍历arraylist对string【】数组赋值
      

  3.   

    之前有个人问了几乎一样的问题,我做了比较详细的回答。这次不重复了,
    http://bbs.csdn.net/topics/390284294
      

  4.   


    下面是你以前回答别人的那个答案:
    ----------------------------------------------------------------------------------------
    你应该这么设计:控件1定义一个TextBoxValueSubmitted事件,当用户点击其中的按钮的时候触发。控件本身不应该知道触发了事件外部谁关心它,也不必知道外部接到通知该做什么,它只负责按了按钮就触发这个事件把消息传出去就行了。控件2应该有一个TextBoxValue属性,外部可以通过它设置文本框的值。同样的道理,这个控件不应该知道为什么这个值要被设置,也不应该知道谁在试图修改它,它只要接到调用请求,就照着做就行了。你的主程序应该编写一个事件处理函数,并且关联给控件1的TextBoxValueSubmitted事件,就好比你使用一个按钮而准备一个Click事件的处理函数那样。在这个处理函数中,你去调用控件2的TextBoxValue属性,设置正确的值。主程序不关心控件1的事件怎么触发,也不关心设置属性后控件2会做什么,它就是一个桥梁,把这些控件联系在一起。-----------------------------------------------------------------------------------------------
    我左边是一个UserControl1,里面放的是一个TreeView,右边是一个DataGridView,想要点击节点的时候右边的DataGridView能完成实时更新。我不清楚哪个是我的主程序了,这两个UserControl都放在Form1里面,现在我的主程序是Form1的构造函数还是整个程序的入口处Program.cs的Main方法??我的这几行代码 UCTreeView ucTreeView = new UCTreeView();
     UCDataGridView ucGridView = new UCDataGridView();
     ucTreeView.Update += new UCTreeView.EventHandler(ucGridView.getNewSource);//订阅事件在Form1的构造函数和Main方法里分别都试过,但是都不能完成,报错了,提示之前声明的Update代理没有实例化,证明订阅事件的这个方法根本没执行啊?求解。我对winform窗口运行的机制了解的不好。谢谢了!
      

  5.   


    关系不是紧密的,都有和数据库交互的部分,做成两个模块,降低耦合性啊,看了别的资料说是事件的挂载有问题,调试的时候每次都说 定义的委托为null。
      

  6.   


    看了别的资料说是事件的挂载有问题,我调试的时候每次都说 定义的委托为null。为什么没执行呢?