データベースとしてSQLServer2008 R2を使用して、asp.netでデータ駆動型の動的メニューを作成しています。親ノードと、最初のレベルの子ノードは問題なく機能します。ただし、子ノードが別の子ノードの下にある場合、アプリケーションは例外を生成します。私の問題のC#コードは次のとおりです:
public partial class LeaveManagementSystemMasterPage : System.Web.UI.MasterPage
{
SqlConnection conn;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
getMenu();
}
}
private void getMenu()
{
Connect();
conn.Open();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
string sqlQuery = "select * from menu";
SqlDataAdapter da = new SqlDataAdapter(sqlQuery, conn);
da.Fill(ds);
dt = ds.Tables[0];
DataRow[] rowParent = dt.Select("ParentID=" + 0);
DataRow[] rowChild = dt.Select("ParentID>"+0);
//populating the first level of the menu
foreach (DataRow dr in rowParent)
{
Menu1.Items.Add(new MenuItem(dr["MenuName"].ToString(),dr["MenuID"].ToString(),"",""));
}
//populating the children in menu
foreach (DataRow dr in rowChild)
{
MenuItem child = new MenuItem(dr["MenuName"].ToString(), dr["MenuID"].ToString(), "", "");
Menu1.FindItem(dr["ParentID"].ToString()).ChildItems.Add(child);
}
conn.Close();
}
public void Connect()
{
string conStr="Data Source=HO-0000-LAP; Initial Catalog=LeaveManagementSystem; Integrated Security=true";
conn = new SqlConnection(conStr);
}
}
そしてこれが私がsqlserver2008で設計した私のテーブルです:-