1
sqlstr = "select ModuleName,ModuleId,pagename from modules WHERE ParentID='" + parentID + "' AND VIsibility=1 ORDER BY ModuleId";

cmd.CommandText = sqlstr;
cmd.Connection = cn; ;
dr = cmd.ExecuteReader();

while (dr.Read())
{
    menu.Tag = dr["ModuleId"].ToString();
    menu.Text = dr["ModuleName"].ToString();
    menu.Name = dr["pagename"].ToString();
    menu.ToolTipText = dr["pagename"].ToString();
    menuStrip1.Items.Add(menu);
    menuStrip1.Show();
}

cn.Close();
dr.Close();

仅添加查询中的最后一项。如何添加查询中的所有项

4

3 回答 3

3
while (dr.Read())
{
    // If you don't do this, you are just changing the same
    // ToolStripMenuItem object all the time.
    menu = new ToolStripMenuItem();

    menu.Tag = dr["ModuleId"].ToString();
    menu.Text = dr["ModuleName"].ToString();
    menu.Name = dr["pagename"].ToString();
    menu.ToolTipText = dr["pagename"].ToString();
    menuStrip1.Items.Add(menu);
    menuStrip1.Show();
}
于 2012-05-08T14:08:11.710 回答
1

每次都必须在循环中创建一个新的 ToolStripMenuItem。您只需继续覆盖同一菜单实例上的属性。

于 2012-05-08T14:08:00.947 回答
0

每次阅读新行时尝试创建一个新的菜单实例。

像这样的东西:

 while (dr.Read())
 {
    var menu = new ToolStripMenuItem();

    ...
 }
于 2012-05-08T14:10:25.203 回答