1。双击TreeView中的一个记录后,怎么样把这个记录ID添加到TEXT框中的光标停留位置的后面?2。有3个数据库表:
表一字段:ID1   Name1                     (其中ID1为2位数字,如“01”)
表二字段:ID2   Name2   ID1               (其中ID2为4位数字,如“0101”)
表三字段:ID3   Name3   ID1   ID2         (其中ID3为6位数字,如“010101”)怎么样用TreeView显示成3级?

解决方案 »

  1.   

    第一个问题
    在树的双击事件中
    int i=this.textBox1.SelectionStart;
    this.textBox1.Text=this.textBox1.Text.Insert(i,tree.SelectNode.Text);
      

  2.   

    谢谢:yuxing117(雨行) 第一个问题,已经解决。第二个问题,结构可能不能改了。我把代码发出来看看。
      

  3.   

    3。怎么获取光标位于哪个TEXT框呢?目前有几个TEXT框!
      

  4.   

    第3个问题
    this.ActiveControl.Name.ToString();
      

  5.   

    2。
    #region 获取TreeViewBasic_Show
    private void TreeViewBasic_Show(string basictypecode)
    {
    treeviewBasic.Nodes.Clear();
                               DataSet dsbasic1=Basic1Manager.GetDataSet();
    DataSet dsbasic2=Basic2Manager.GetDataSet();
    DataSet dsbasic3=Basic3Manager.GetDataSet(); DataTable dtbasic1=new DataTable();
    dtbasic1=dsbasic1.Tables[0];
    DataTable dtbasic2=new DataTable();
    dtbasic2=dsbasic2.Tables[0];
    DataTable dtbasic3=new DataTable();
    dtbasic3=dsbasic3.Tables[0];

                
    // 开始加入第一级节点,ID为2位
    // 目前节点有限制,就是子节点的ID不能超过两位                
    foreach (DataRow dr in dtbasic1.Rows)
    {
    string id = dr["BasicTypeCode"].ToString(); if (id.Length == 2)
    {
    TreeNode node = new TreeNode(dr["BasicTypeName"].ToString());
    node.Tag = id;
    treeviewBasic.Nodes.Add(node); AddChildBasic(dtbasic2,id,node.Nodes);
    }
    }
    }
    void AddChildBasic(DataTable dt, string pid, TreeNodeCollection nodes)
    {
    foreach (DataRow dr in dt.Rows)
    {
    string id = dr["BasicNameCode"].ToString(); //跳到子节点
    if ((id.Length == pid.Length+2) && id.StartsWith(pid))
    {
    TreeNode node = new TreeNode(dr["BasicNameName"].ToString());
    node.Tag = id;
    nodes.Add(node);
    // treeviewBasic.SelectedImageIndex=1; AddChildBasic(dt,id,node.Nodes);
    }
    }

    #endregion
    现在的情况是dtbasic3不能显示了。
    好像只能用:
    for(int i=0;dtbasic1.count;i++)
    {
    for(int i=0;dtbasic1.count;i++)
    {
    for(int i=0;dtbasic1.count;i++)
    {}
    }}
    大家能帮我写出来吗?
      

  6.   

    还是第一个问题:
    比如现在有2个TEXT框,事先把光标放在TEXT1,然后双击TreeView中的记录后,会往TEXT1中光标位置后添加该记录。
    但是现在是在treeviewBasic_DoubleClick事件中,怎么判断双击之前的光标是在哪个TEXT框呢?
      

  7.   

    技术交流群号:23266021
    欢迎大家在此讨论关于.net的各种技术。1号群
      

  8.   

    表结构加一个字段 par 记录父结点,然后通过递归就可以,也不影响现在的编号方法
      

  9.   

    to   Anders_lt(突破渴望):表一字段:ID1   Name1                     (其中ID1为2位数字,如“01”)
    表二字段:ID2   Name2   ID1               (其中ID2为4位数字,如“0101”)
    表三字段:ID3   Name3   ID1   ID2         (其中ID3为6位数字,如“010101”)表二和表三都有父结点啊。
      

  10.   

    我想了个土法子
    Private string strControeName;
    在每个控件的leave事件中写上
    this.strControlName=当前控件的名字
    树在双击的时候可以去这里取了
      

  11.   

    yuxing117(雨行):
    你的这个土办法还是可以的。谢谢了。就只剩下第二个问题没解决了。2。
    #region 获取TreeViewBasic_Show
    private void TreeViewBasic_Show(string basictypecode)
    {
    treeviewBasic.Nodes.Clear();
                               DataSet dsbasic1=Basic1Manager.GetDataSet();
    DataSet dsbasic2=Basic2Manager.GetDataSet();
    DataSet dsbasic3=Basic3Manager.GetDataSet(); DataTable dtbasic1=new DataTable();
    dtbasic1=dsbasic1.Tables[0];
    DataTable dtbasic2=new DataTable();
    dtbasic2=dsbasic2.Tables[0];
    DataTable dtbasic3=new DataTable();
    dtbasic3=dsbasic3.Tables[0];

                
    // 开始加入第一级节点,ID为2位
    // 目前节点有限制,就是子节点的ID不能超过两位                
    foreach (DataRow dr in dtbasic1.Rows)
    {
    string id = dr["BasicTypeCode"].ToString(); if (id.Length == 2)
    {
    TreeNode node = new TreeNode(dr["BasicTypeName"].ToString());
    node.Tag = id;
    treeviewBasic.Nodes.Add(node); AddChildBasic(dtbasic2,id,node.Nodes);
    }
    }
    }
    void AddChildBasic(DataTable dt, string pid, TreeNodeCollection nodes)
    {
    foreach (DataRow dr in dt.Rows)
    {
    string id = dr["BasicNameCode"].ToString(); //跳到子节点
    if ((id.Length == pid.Length+2) && id.StartsWith(pid))
    {
    TreeNode node = new TreeNode(dr["BasicNameName"].ToString());
    node.Tag = id;
    nodes.Add(node);
    // treeviewBasic.SelectedImageIndex=1; AddChildBasic(dt,id,node.Nodes);
    }
    }

    #endregion
    现在的情况是dtbasic3不能显示了。
    好像只能用:
    for(int i=0;dtbasic1.count;i++)
    {
    for(int i=0;dtbasic1.count;i++)
    {
    for(int i=0;dtbasic1.count;i++)
    {}
    }}
    大家能帮我写出来吗?
      

  12.   

    下班了。下周一结贴。谢谢各位。特谢谢yuxing117(雨行)。
      

  13.   

    最近比较忙
    只写了段伪代码
    可能对你有帮助
    DataTable dt1=一层表;
            DataTable dt2=二层表;
        DataTable dt3=三层表;
          System.Data.DataRelation dr1=new DataRelation("first",dt1,dt2,new string[]{"id1"},new string[] {"id1"});
    System.Data.DataRelation dr2=new DataRelation("second",dt2,dt3,new string[] {"id2"},new string[] {"id3"});
     foreach (DataRow dr in dt1)
     {
     TreeNode tn=new TreeNode(dr["id1"].ToString().Trim());
     this.treeView1.Nodes.Add(tn);
     foreach(DataRow drr in dr.GetChildRows(dr1))
     {
     TreeNode tnn=new TreeNode(drr["id2"].ToString().Trim());
     tn.Nodes.Add(tnn);
     foreach(DataRow drrr in drr.GetChildRows(dr2))
     {
     TreeNode tnnn=new TreeNode(drrr["id3"].ToString().Trim());
     tnn.Nodes.Add(tnnn);
     }  }
     }
      

  14.   

    刚上来。
    yuxing117(雨行) :
    你的这个方法已经试了(我想了个土法子Private string strControeName;在每个控件的leave事件中写上this.strControlName=当前控件的名字树在双击的时候可以去这里取了),
    可行。上面这个方法还没试,不管怎么样,还是谢谢你。
    结贴吧。