次の例を使用して、データベースから動的メニューを作成しようとしています http://www.dotnetfunda.com/articles/article1477-how-to-create-a-menu-in-aspnet-using-aspmenu-control.aspx
以下に投稿されているコードを変更しましたが、親メニューのみが表示され、子メニューは表示されません。コードのデバッグ中に何か問題があると確信しています。AddChildItems 関数の foreach (dvMenu の DataRowView 行) に入らないことに気付きました
私のSQLクエリは次のようなものです
Select PageID, PageName,PageInternalLinkURL, PageInheritance from pg_Pages
私が使用しているコードスニペット
<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);
}
}
何が間違っているのかわかりません。私のデータベースに基づいて、行Page2の子メニューが表示されるはずです。一致する子行に対して AddChildItems 関数が呼び出されると、ループを処理するだけで、子行からは何も表示されません。
現在のコードを含む出力
ホーム | ページ 2 | ページ3 | ページ4