Witam
Mam pomysł, i wydaje mi się możliwy do wykonania, ale w praktyce jeszcze nie udało mi się wpaść na to, jak to zrobić
Pobieram z bazy danych listę nazw do DataTable.
Chciałbym, aby ta lista nazw wyświetliła się jako kolejne elementy submenu typu ToolStripMenuItems dla wybranej opcji menu.
Niestety z założenia nie da się wcześniej zdefiniować jak taka lista będzie wyglądała, więc nie da się również sztywno zdefiniować elementów menu jak i metod im przypisanych.
Jakkolwiek łatwe jest samo stworzenie nowych elementów menu o nazwach pobranych z DataTable, i odpowiednio otagowanych choćby do Enumerable (czyli powiedzmy przeszukiwania elementów), to nie wiem jak dodać do każdego z tych elementów własnej dynamicznej metody z unikalną nazwą.
De-facto metoda ta za każdym razem ma robić dokładnie to samo:
- pobierać nazwę wybranego submenu, lub pozycję z DataTable
- ustawiać wartość zmiennej określającej który element menu wywołano nadrzędnie
- załadować panel graficznego ui. - zawsze taki sam
Na razie mam coś takiego:
private void ISM_Nowy_Grafik_Click(object sender, EventArgs e)
{
ISM_Nowy_Grafik = (ToolStripMenuItem)sender;
PobierzDane loadData = new PobierzDane();
DataTable listaDziałów = new DataTable();
string polecenieSQL = string.Format(@"SELECT Dzial FROM [dbo].[Dzial]");
try
{
loadData.Pobierz(polecenieSQL, ref listaDziałów);
}
catch (Exception ex)
{
MessageBox.Show("Błąd pobierania listy działów : " + ex);
}
if (listaDziałów.Rows.Count == 0)
{
return;
}
else
{
string nazwaDziału = "";
if (ISM_Nowy_Grafik.DropDownItems.Count == 0)
{
for (int i = 0; i < listaDziałów.Rows.Count; i++)
{
nazwaDziału = Convert.ToString(listaDziałów.Rows[i][0]);
ToolStripMenuItem submenu;
submenu = new ToolStripMenuItem();
submenu.Text = nazwaDziału;
submenu.Name = i.ToString(); ;
submenu.Tag = i;
submenu.Checked = false;
submenu.CheckOnClick = true;
submenu.Click += new EventHandler(TSMI_NazwaDziału_Click);
ISM_Nowy_Grafik.DropDownItems.Add(submenu);
}
}
}
}
TSMI_NazwaDziału_Click - może być wspólna dla wszystkich elementów wyświetlonych, bo wykona za każdym razem dokładnie taki sam kod.
Czy ktoś ma pomysł , lub wie i może podpowiedzieć jak takie coś osiągnąć?