我想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();
}
}
答案 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数据类型从数据库更改为整数。