2012-05-08 2 views
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(); 

добавив только последний элемент из query.how добавить все элементы из запросаКак добавить ToolStripMenuItems динамически

+0

также и нужно не закрывать читателя, если у ¨R закрытия соединения, он получает расположенный автоматически. Но вы всегда закрываете читателей как часть хорошей привычки кодирования, что имеет смысл только в том случае, если вы делаете это до закрытия соединения. – nawfal

ответ

1

Вы должны создать новый ToolStripMenuItem в цикле каждый раз. Вы просто сохраняете свойства перезаписи в том же экземпляре меню.

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(); 
} 
+0

@KeithS. В следующем шаге используются параметры команды и ключевое слово 'using'. – SimpleVar

+0

Спасибо, сэр .. – siva

0

Попробуйте создать новый экземпляр меню каждый раз, когда вы читаете новую строку.

Что-то вроде этого:

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

    ... 
}