【问题标题】:Menu went wrong菜单出错了
【发布时间】:2011-08-13 05:11:30
【问题描述】:

这是我的数据库

   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;
    }

你能帮我正确填写菜单吗..

【问题讨论】:

  • 如果您可以控制数据库,我建议让父列指向 ID,而不是文本列。这将允许您更改文件夹名称,而无需更新所有 parentitemid 单元格。
  • 请不要将“C#”添加到您的标题中,只是为了将您的问题归类。我们在Stack Overflow 上使用标签。

标签: c# asp.net


【解决方案1】:

看起来您的数据检索是您的第一个问题。看起来您将检索您的父数据,然后立即用子数据覆盖菜单表。然后,这看起来会以一对一的方式将您的一张表与其自身相关联。

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

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

【讨论】:

  • 所以,我需要创建另一个表并在菜单和子菜单之间建立关系
  • 是的。 parent 和 child 是用于获取数据的两个单独命令,但两者都试图将数据放入同一数据集中的同一表名中,导致其被覆盖。
  • 你能说出最好的分桌方式吗
  • 最佳除法可以有多种工作方式,具体取决于您的需要。这是一个让您大开眼界的课程项目还是您打算发展多年的商业网站?如果您的菜单的深度永远不会超过一层,那么您最好在数据库中使用父表和子表来镜像它(键控到键而不是上面建议的名称)。如果子菜单可以有子菜单,则您的基本想法适用于分层性质。我会建议一些机制来表示您的菜单项的排列。
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 2013-02-16
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多