Привязка пункта меню из базы данных SQL-WPF/C#
Здравствуйте Разработчики,
У меня есть проблема с пунктом меню WPF/C#. Я хочу, чтобы пункты меню заполнялись из базы данных SQL. У меня есть следующий код. Скорее всего, мне не хватает чего-то в XAML для привязки данных из базы данных к окну, но давайте посмотрим, что вы думаете.
Фрагмент Кода C#
const string sql = "SELECT DISTINCT [PT].[PhysTypeCode], [PT].[PhysTypeDesc], 0 AS [ParentID] FROM [dbo].[PhysicianTypes] AS [PT] WHERE [PT].[PhysTypeDesc] <> '-- Select --' ORDER BY [PT].[PhysTypeDesc] ASC;"; Log.Debug("SP: " + sql + " for GetPhysTypes()"); Log.Debug("Dbconn called and created for GetPhysTypes()"); var connectionString = Settings.Default.Dbconn; using (var conn = new SqlConnection(connectionString)) using (var cmd = new SqlCommand(sql, conn)) { try { conn.Open(); using (var adapter = new SqlDataAdapter(cmd)) { var ds = new DataSet(); var dt = new DataTable(); adapter.Fill(ds); dt = ds.Tables[0]; var mbar = dt.Select("ParentID=" + 0); foreach (var dr in mbar) { MiTypeAc.Items.Add(new MenuItem(dr["PhysTypeDesc"].ToString())); } Log.Debug("Command executed and reader completed for GetPhysTypes()"); } } catch (SqlException ex) {...//more code in the catch, but not important here...
Вызов GetPhysTypes
private void MiTypeAc_Loaded(object sender, System.Windows.RoutedEventArgs e) { GetPhysTypes(); }
Теперь та часть, которую я действительно ненавижу (главным образом потому, что я не совсем хорошо понимаю привязку)
XMAL
<MenuItem Header="By Type"> <MenuItem x:Name="MiTypeAc" Header="A-C" ItemsSource="{Binding PhysTypeDesc}" Loaded="MiTypeAc_Loaded"/> </MenuItem>
Происходит следующее: окно загружается, я перехожу к меню, и меню открывается с большой областью (по вертикали примерно так будет выглядеть 21 запись - 21 запись-это количество записей из инструкции SQL), но оно пусто. Итак, запрос работает, C# работает (я думаю), но привязки данных к окну нет... оно пустое...
мысли?
Обновление: я получаю данные из SQL, так что это должна быть проблема с получением данных из C# в XAML...
Отладчик: mbar = {System.Data. DataRow[21]}
Отладчик: mbar[0].ItemArray[1] = " Ассистент Анестезиолога"
Что я уже пробовал:
Приведенный выше код. Я действительно не хочу жестко кодировать значения, поскольку пользователи могут и будут добавлять описания и типы в систему с течением времени.