创建动态菜单和子菜单,然后给出此错误

本文关键字:菜单 然后 错误 动态 创建 | 更新日期: 2023-09-27 18:35:05

DataSet ds = new DataSet();
DataTable dt = new DataTable();
string sql = "Select * from MenuControl";
SqlDataAdapter da = new SqlDataAdapter(sql, con);
da.Fill(ds);
dt = ds.Tables[0];
foreach (DataRow dr in dt.Select("ParentId=" + 0))
{
    if (dr["MenuName"] != null && dr["MenuId"] != null && dr["LocationUrl"] != null)
    {
        menuBar.Items.Add(new MenuItem(dr["MenuName"].ToString(), dr["MenuId"].ToString(), "", dr["LocationUrl"].ToString()));
    }
}
foreach (DataRow dr in dt.Select("ParentId>" + 0))
{
    if (dr["MenuName"] != null && dr["MenuId"] != null && dr["LocationUrl"] != null)
    {
        MenuItem mnu = new MenuItem(dr["MenuName"].ToString(), dr["MenuId"].ToString(), "", dr["LocationUrl"].ToString());

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

这是错误:

    System.NullReferenceException: Object reference not set to an instance of an object.
if (dr["ParentId"] != null)
Line 56:                 {
Line 57:                     menuBar.FindItem(dr["ParentId"].ToString()).ChildItems.Add(mnu);
Line 58:                 }
Line 59:             }   

创建动态菜单和子菜单,然后给出此错误

如果

FindItem返回 null? 在设置子项之前添加空检查

var item = menuBar.FindItem(dr["ParentId"].ToString());
if(item !=null)
  item.ChildItems.Add(mnu);

您可能需要查找在应用程序中使用的控件FindItem的文档,根据 Menu.FindItem 方法,您需要像"rootname,child1,child11"一样提供值路径,但这取决于您使用的应用程序类型和您使用的控件。