Создание меню программно в веб-форме Asp.net c # - PullRequest
0 голосов
/ 02 апреля 2012

Я должен создать динамическое меню из базы данных. Я использовал следующий пример, который показывает только родительские меню, но не показывает дочернее меню. http://www.dotnetfunda.com/articles/article1477-how-to-create-a-menu-in-aspnet-using-aspmenu-control.aspx

Фрагмент кода, который я использую

<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal" >

// I am convert ds to table for now.
DataTable table = dsMenu.Tables[0]; ;
DataView dvMenu = new DataView(table);
dvMenu.RowFilter = "PageInheritance is NULL";
foreach (DataRowView row in dvMenu)
{
MenuItem menuItem = new MenuItem(row["PageName"].ToString(), row["PageId"].ToString());
menuItem.NavigateUrl = row["PageURL"].ToString() + "?PageId=" + row["PageId"] + "&Language=" + sLangCode;
Menu1.Items.Add(menuItem);
AddChildItems(dvMenu.Table, menuItem);
}

//Function to look for child menu
    private static void AddChildItems(DataTable table, MenuItem menuItem)
    {
        DataView viewItem = new DataView(table);
        viewItem.RowFilter = "PageInheritance = " + menuItem.Value;
        foreach (DataRowView childView in viewItem)
        {
            MenuItem childItem = new MenuItem(childView["PageName"].ToString(),
            childView["PageId"].ToString());
            childItem.NavigateUrl = childView["PageURL"].ToString();
            menuItem.ChildItems.Add(childItem);
            AddChildItems(table, childItem);
        }
    }

Я не уверен, что я делаю неправильно. Основываясь на моей базе данных, она должна показывать мне детские меню для строки xyz. когда функция AddChildItems вызывается для дочерней строки соответствия, она просто обрабатывает цикл и не показывает ничего из дочерних строк.

ВЫХОД с текущим кодом

ГЛАВНАЯ | Page2 | Page3 | Page4

Он должен показывать мне подменю для Page2 на основе моей базы данных. скорее, он показывает только ссылки на родительские страницы, как указано выше.

1 Ответ

0 голосов
/ 02 апреля 2012
public void FillMenuControl(int ACCESSID)
    {
        try
        {
            int AcessID;
            int UserSessionid = 1;
            dtchild = new DataTable();
            OBJClsMenuList = new ClsMenuList();
            ds = new DataSet();
            OBJClsMenuList = new ClsMenuList();
            ds = OBJClsMenuList.GetParentMenuItems(ACCESSID,'G');

            dt = new DataTable();
            dt = ds.Tables[0];
            MenuItem item1;
            MenuItem childitems;
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    item1 = new MenuItem();
                    string t = dt.Rows[i][0].ToString();
                    item1.Value = dt.Rows[i][0].ToString();
                    item1.Text = dt.Rows[i][1].ToString();
                    item1.NavigateUrl =  dt.Rows[i][2].ToString();
                    Menu1.Items.Add(item1);

                    dschild = OBJClsMenuList.GetChildMenuitems(Convert.ToInt32(dt.Rows[i][0].ToString()),'G');
                    dtchild = new DataTable();
                    dtchild = dschild.Tables[0];
                    for (int j = 0; j < dtchild.Rows.Count; j++)
                    {
                        childitems = new MenuItem();
                        childitems.Value = dtchild.Rows[j][0].ToString();
                        childitems.Text = dtchild.Rows[j][1].ToString();
                        AcessID = Convert.ToInt32(dtchild.Rows[j][3].ToString());
                        if (UserSessionid >= AcessID)
                        {
                            childitems.NavigateUrl = dtchild.Rows[j][2].ToString();
                        }
                        else
                        {
                            childitems.NavigateUrl = "~/login.aspx";
                        }

                        Menu1.Items[i].ChildItems.Add(childitems);
                    }
                }
            }
            else
            {

            }
        }

        catch (Exception ex)
        {
            string err = ex.Message;
            if (ex.InnerException != null)
            {
                err = err + " :: Inner Exception :- " + ex.InnerException.Message;
            }
            string addInfo = "Error  :: -> ";
            ClsExceptionPublisher objPub = new ClsExceptionPublisher();
            objPub.Publish(err, addInfo);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...