To lecimy od początku - może na tej podstawie uda się Wam znaleźć mój błąd.
Mamy form logowania. W nim pobieramy z bazy wartości i zapisujemy do zmiennych:
Kopiuj
Zmienne.IDOperatora_zalogowanego = this.IDOperatora;
Zmienne.IDAdministracji = this.IDAdministracji;
Zmienne.DSNAdministracji = this.DSNAdministracji;
Po drodze oczywiście jest jeszcze trochę kodu ale to nas głównie interesuje. Ustawiamy bool zalogowano na true i robimy
W samym Main mamy:
Kopiuj
frm_Logowanie logowanie = new frm_Logowanie();
Application.Run(logowanie);
if (logowanie.zalogowano)
{
Application.Run(new frm_Glowne());
}
W ten sposób przechodzimy do głównego form gdzie na starta mamy dynamiczne tworzenie menu (pobierane z bazy na podstawie uprawnień operatora) - tutaj już wykorzystuję
Kopiuj
Zmienne.DSNAdministracji
w której jest dostęp ODBC do bazy w której jest zapisane menu oraz Zmienne.IDOperatora
Kopiuj
żeby sprawdzić uprawnienia.
W głównym form mamy tworzenie menu podczas Load:
```csharp
private void FormGlowny_Load(object sender, EventArgs e)
{
//wczytanie menu głównego z bazy danych
MenuStrip menuGlowne = new MenuStrip();
this.Controls.Add(menuGlowne);
this.MainMenuStrip = menuGlowne;
OdbcDataAdapter da = new OdbcDataAdapter(Selecty_Menu.MenuGlowne, Baza_Polaczenie_Glowne.PolaczenieModuly);
DataTable dt = new DataTable();
Baza_Polaczenie_Glowne.PolaczenieModuly.Open();
da.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
ToolStripMenuItem menuGlowneItem = new ToolStripMenuItem(dr["TekstMenu"].ToString());
SubMenu(menuGlowneItem, Convert.ToInt32(dr["IDMenu"]));
menuGlowne.Items.Add(menuGlowneItem);
}
this.MainMenuStrip = menuGlowne;
Baza_Polaczenie_Glowne.PolaczenieModuly.Close();
}
//metoda wczytująca podmenu
public void SubMenu (ToolStripMenuItem mnu, int submenu)
{
String Zapytanie = Selecty_Menu.MenuModuly_Podmenu1 + Zmienne.IDOperatora_zalogowanego + Selecty_Menu.MenuModuly_Podmenu2 + submenu;
OdbcDataAdapter da_submenu = new OdbcDataAdapter(Zapytanie, Baza_Polaczenie_Glowne.PolaczenieModuly);
DataTable dt_child = new DataTable();
da_submenu.Fill(dt_child);
foreach (DataRow dr in dt_child.Rows)
{
ToolStripMenuItem ssubmenu = new ToolStripMenuItem(dr["TekstMenu"].ToString(), null, new EventHandler(KliknieciePozycji));
mnu.DropDownItems.Add(ssubmenu);
}
}
//metoda kliknięcia w dane podmenu
private void KliknieciePozycji(object sender, EventArgs e)
{
String ZapytanieGotowe = Selecty_Menu.MenuModuly_Klik_JakiForm + sender.ToString() + "'";
OdbcDataAdapter datransaction = new OdbcDataAdapter(ZapytanieGotowe, Baza_Polaczenie_Glowne.PolaczenieModuly);
DataTable dtransaction = new DataTable();
datransaction.Fill(dtransaction);
Assembly frmAssembly = Assembly.LoadFile(Application.ExecutablePath);
foreach (Type type in frmAssembly.GetTypes())
{
//MessageBox.Show(type.Name);
if (type.BaseType == typeof(Form))
{
if (type.Name == dtransaction.Rows[0][0].ToString())
{
Form frmShow = (Form)frmAssembly.CreateInstance(type.ToString());
frmShow.MdiParent = this;
frmShow.Show();
}
}
}
}
Do tego momentu wszystko działa prawidłowo, jest połączenie z bazą, zmienne są przechowywane poprawnie. Jak z tego poziomu przechodzę do kolejnego form podczas Load chcę wykorzystać
Kopiuj
Zmienna.DSNAdministracji
i tutaj mam problem bo jest ona pusta.
Kopiuj
public partial class frm_TransWyjazdy : Form
{
public frm_TransWyjazdy()
{
InitializeComponent();
}
private void frm_TransWyjazdy_Load(object sender, EventArgs e)
{
MessageBox.Show(Zmienne.DSNAdministracji);
MessageBox.Show(Convert.ToString(Zmienne.IDAdministracji));
OperacjeNaBazie.WypelnienieDropDown(Selecty_Transport.TrasyDoWyjazdow, "TransTrasy_V", "IDTrasy", "NazwaPelna", cb_Trasa, Baza_Polaczenie_Glowne.PolaczenieModuly);
}
}
MessageBox nic nie pokazują na na
Kopiuj
OperacjeNaBazie.WypelnienieDropDown
wywala błąd gdyż nie ma DSNAdministracji który jest potrzebny do Baza_Polaczenie_Glowne.PolaczenieModuly