我想在asp.net中动态显示子菜单

时间:2012-10-26 05:32:54

标签: c# asp.net

我想display submenu dynamically from database。但我收到错误 菜单栏。 FindItem(dr["ParentMenuId"].ToString()).ChildItems.Add(mnu);该对象引用未设置为对象的实例。我也是unable to display my submenu。请告诉我什么错误。

我的代码是:

protected void Page_Load(object sender, EventArgs e)
{
    if (! IsPostBack)
        getMenu(); 
}

private void getMenu()
{
    SqlConnection con = new SqlConnection(@"Data Source=ST015\SQLEXPRESS;Initial Catalog=MyData;Integrated Security=True");
    con.Open();
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    string sql = "Select * from Categories";
    SqlDataAdapter da = new SqlDataAdapter(sql, con);
    da.Fill(ds);
    dt = ds.Tables[0];
   // DataRow[] drowpar = dt.Select("ParentMenuId=" + 0);

    foreach (DataRow dr in dt.Select("ParentMenuId=" + 0))
    {
        menuBar.Items.Add(new MenuItem(dr["MenuName"].ToString(),
                dr["MenuId"].ToString(), "",
                dr["MenuDescription"].ToString()));
    }

    foreach (DataRow dr in dt.Select("ParentMenuId >" + 0))
    {
        MenuItem mnu = new MenuItem(dr["MenuName"].ToString(),
                       dr["MenuId"].ToString(),
                       "", dr["MenuDescription"].ToString());
        menuBar.FindItem(dr["ParentMenuId"].ToString()).ChildItems.Add(mnu);

    }
    con.Close();
}

}

2 个答案:

答案 0 :(得分:0)

我认为dr["ParentMenuId"]必须以null的形式出现,这就是您获得null reference error的原因。 检查您是否获得dr["ParentMenuId"]值....总是尝试检查可空值如下....

foreach (DataRow dr in dt.Select("ParentMenuId=" + 0))
{
   if(dr["MenuName"]!=null && dr["MenuId"]!=null && dr["MenuDescription"]!=null)
   {
     menuBar.Items.Add(new MenuItem(dr["MenuName"].ToString(),
            dr["MenuId"].ToString(), "",
            dr["MenuDescription"].ToString()));
   }
}

foreach (DataRow dr in dt.Select("ParentMenuId >" + 0))
{
   if(dr["MenuName"]!=null && dr["MenuId"]!=null && dr["MenuDescription"]!=null)
   {
     MenuItem mnu = new MenuItem(dr["MenuName"].ToString(),
                   dr["MenuId"].ToString(),
                   "", dr["MenuDescription"].ToString());
   }

   if(dr["ParentMenuId"]!=null)
   {
     menuBar.FindItem(dr["ParentMenuId"].ToString()).ChildItems.Add(mnu);
   }
}

答案 1 :(得分:0)

这是旧的但似乎没有解决。 我遇到了同样的问题 您必须将ParentMenuId和MenuId数据类型从数据库更改为整数。