0

我想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();
}

}

4

2 回答 2

0

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

于 2014-07-18T09:01:52.970 回答
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);
   }
}
于 2012-10-26T06:33:56.913 回答