问题原因很简单一个父节点如果拖动到子节点中就会出错.
如何判断两者关系,Nodes.Contains只能判断一层,如果有多层如何判断?写一个判断函数很简单,只是想知道有没有提供现有功能.

解决方案 »

  1.   

    就10分,怎么抢啊?
    给你一个函数吧:
                      //-2=无关系,0=相同,-1=nID是nID2的父节点,1=nID2是nID的父节点
                      //该方法写的相对简单,不能直接套用,大致用个思路,因为对节点比较的部分各有不同。
    private int ChkLineal(string nId, string nId2)
    {
    //if DealerId equals DEALERID(node)
    if (nId.ToString() == nId2.ToString())
    return 0;
    //if DealerId is the parent(grand...) of the DEALERID
    if (ChkPC(nId, nId2))
    return -1;
    //if DealerId is the son(grand...) of the DEALERID
    if (ChkPC(nId2, nId))
    return 1;
    return -2;
    } private bool ChkPC(string parentid, string childid)
    {
    bool iResult = false;
    string strExpr = " parent_id = " + parentid;
    DataRow[] drs = dtDealers.Select(strExpr);
    foreach (DataRow dr in drs)
    {
    if (dr["nid"].ToString() == childid)
    {
    iResult = true;
    }
    else
    {
    if (ChkPC(dr["nid"].ToString(), childid))
    iResult = true;
    }
    }
    return iResult;
    }
      

  2.   

    注意,所有节点的数据,我都放在了一个DataTable里。所以在判断的时候,直接取从中取数据就可以了。