我的目的是建立无限级菜单.
数据库表有三个字段.分别是父ID,子ID,文字说明
这三个字段我先开始都用了文本类型,父ID和子ID都用GUID来标识.
可是在CS代码中用
ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["DPID"], ds.Tables[0].Columns["ParentDPID"]);
这样的代码来建立父子关系的时候,在运行时生成这样的错误.
=======================================================
不能启用此约束,因为不是所有的值都具有相应的父值.
=======================================================
我仔细检查了数据库中的数据,没任何问题.
然后我试着把父ID和子ID字段都改为了INT类型,运行正常了,可以生成无限级菜单.
这里我想问,如果我还是想把字段设置为文本类型,用GUID来标识其ID,有没有办法正常使用的?
分有点少,我只有这些了,请有经验的人来帮个忙吧,谢谢了.

解决方案 »

  1.   

    补充一句.
    如果那两个字段是文本类型的,就算把他们的数据都从GUID改为数字,运行时还是那个错误.
    只能把类型改为INT的,数据为数字,运行才能正常!
    还有没有办法解决啊..
    因为这个库是以前的程序员建的.但是目前项目中有一TREEVIEW就是通过这个表结构生成的(只不过看不到代码实现).
    为什么我在用ds.Relations.Add方法的时候就不行,我想应该是这个方法的问题.不支持数字以外的其它类型吧.
      

  2.   

    再给出想实现的效果的代码
    ===============================================================
    private void buildMenu()
    {
    OleDbConnection dbCon = new OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("2.mdb")); 
    dbCon.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM USER_DEPT_PLUS ORDER BY DPID", dbCon); 
    DataSet ds = new DataSet();
    adapter.Fill(ds);
    ds.Relations.Add("NodeRelation", ds.Tables[0].Columns["DPID"], ds.Tables[0].Columns["ParentDPID"]); foreach(DataRow dbRow in ds.Tables[0].Rows)
    {
    if(dbRow.IsNull("ParentDPID"))
    {          
    ComponentArt.Web.UI.MenuItem newItem = CreateItem(dbRow);
    Menu1.Items.Add(newItem);
    PopulateSubMenu(dbRow, newItem);
    }
    }
    } private void PopulateSubMenu(DataRow dbRow, ComponentArt.Web.UI.MenuItem item)
    {
    foreach (DataRow childRow in dbRow.GetChildRows("NodeRelation"))
    {        
    ComponentArt.Web.UI.MenuItem childItem = CreateItem(childRow);
    item.Items.Add(childItem);
    PopulateSubMenu(childRow, childItem);
    }
    } private ComponentArt.Web.UI.MenuItem CreateItem(DataRow dbRow)
    {
    ComponentArt.Web.UI.MenuItem item = new ComponentArt.Web.UI.MenuItem();
    item.Text = dbRow["Text"].ToString(); 
    return item;
    }
    =======================================================================================
    就是这样的代码..数据字段用INT就正常,用别的都不行,
      

  3.   

    在表之间加上关系即可!
    出错是因为GUID之间没有约束