DataRow[] drowpar = dt.Select("Parent_Id=" + 0);
foreach (DataRow dr in drowpar)
{
MenuItem objMenuItem = new MenuItem();
objMenuItem.Text = dr["Page_Name"].ToString();
objMenuItem.NavigateUrl = dr["Page_Url"].ToString();
MenuBar.Items.Add(objMenuItem);
}
foreach (DataRow dr in dt.Select("Parent_Id >" + 0))
{
MenuItem objMenuItem = new MenuItem();
objMenuItem.Text = dr["Page_Name"].ToString();
objMenuItem.NavigateUrl = dr["Page_Url"].ToString();
//MenuBar.FindItem(dr["Parent_Id"].ToString()).ChildItems.Add(objMenuItem);
MenuBar.FindItem(dr["Parent_Id"].ToString()).ChildItems.Add(objMenuItem);
//MenuBar.Items.Add(objMenuItem);
}
我使用数据库绑定asp.net菜单控件,并在childitem绑定到菜单
下面进行此操作对象引用未设置为对象的实例。
MenuBar.FindItem(dr["Parent_Id"].ToString()).ChildItems.Add(objMenuItem);
答案 0 :(得分:1)
该错误消息仅在特定情况下发生,可能的原因是:
objMenuItem
为空 - 显然在您的代码中它不是dr["Parent_Id"]
为空,并且调用ToString()
会导致错误MenuBar.FindItem(dr["Parent_Id"].ToString())
- 这不是找到具有给定父ID的项目ChildItems
集合为空如果您想确定对象不在null的位置,那么您可以执行以下操作:
var id = dr["Parent_ID"].ToString();
var menuItem = MenuBar.FindItem(id);
if (menuItem != null)
menuItem.ChildItems.Add(objMenuItem);
将代码放在一起掩盖发生实际错误的位置。请注意,还有一个其他方案,我没有考虑,这是错误是在MenuBar本身,并且它被屏蔽。没有看到完整的堆栈跟踪,很难说。如果您可以发布,我们可以进一步隔离它。