菜单出错了

时间:2011-08-12 19:50:45

标签: c# asp.net

这是我的数据库

   ID          parentitemid        text                Url
   1            NULL           folder1         /folder1
   2            folder1     WebForm1.aspx   /folder1/WebForm1.aspx
   3            folder1     WebForm2.aspx   /folder1/WebForm2.aspx
   6              null          folder3     /folder3
   7            folder3     WebForm1.aspx   /folder3/WebForm1.aspx
   8            folder3     WebForm2.aspx   /folder3/WebForm2.aspx
   9            folder3     WebForm3.aspx   /folder3/WebFomr3.aspx

我正试图建立一个菜单......

所以看起来应该像folder1(WebFrom1.aspx,WebForm2.aspx)等等。但它完全错误并打印了folder1(folder1),folder3(folder3),folder1(folder1)....

  • folder1(文件夹1)表示folder1是菜单,括号中的folder1是子菜单。

这是我在代码隐藏中的逻辑

  if (!IsPostBack)
{
    DataSet dst = GetMenuData();
    foreach (DataRow masterRow in dst.Tables["Menu"].Rows)
    {
        if ((string)masterRow["parentitemid"] != "NULL" ||
            (string)masterRow["parentitemid"] != "")
        {
            MenuItem masterItem = new MenuItem((string)masterRow["parentitemid"]);
            Menu1.Items.Add(masterItem);
            foreach (DataRow childRow in masterRow.GetChildRows("Menu"))
            {
                MenuItem childItem = new MenuItem((string)childRow["text"]);
                masterItem.ChildItems.Add(childItem);
            }
        }
    }
}
  DataSet GetMenuData()
    {
        string connectionString = "Data Source=NISHANTH-PC\\SQLEXPRESS;Initial     
   Catalog=roletesting;Integrated Security=True";
        SqlConnection con = new SqlConnection(connectionString);
        SqlDataAdapter parent = new SqlDataAdapter("Select DISTINCT parentitemid from 
    Menu", con);
        SqlDataAdapter child = new SqlDataAdapter("SELECT * FROM Menu", con);
        DataSet dst = new DataSet();
        parent.Fill(dst, "Menu");
        child.Fill(dst, "Menu");
        dst.Relations.Add("Children",
            dst.Tables["Menu"].Columns["parentitemid"],
        dst.Tables["Menu"].Columns["text"],false
      );
        return dst;
    }

请你帮我正确填写菜单..

1 个答案:

答案 0 :(得分:0)

您的数据检索似乎是您的第一个问题。看起来您将检索父数据,然后立即用子数据覆盖Menu表。然后,这将一对一地将您的一个表与自身联系起来。

尝试将您的填充更改为不同的表名,并从那里开始工作......

        parent.Fill(dst, "Menu");
        child.Fill(dst, "SubMenu");