comConBox包含数据库中的数据和tabControl中的DataGrid(xaml wpf C#Oracle DB)

时间:2017-08-27 15:58:28

标签: wpf xaml combobox datagrid tabcontrol

我在tabControl中有来自数据库和DataGrid的数据的comboBox。

一切正常。 我在tabItem_1上的comboBox_1中选择了一些东西(DataGrid_1显示来自DB的表格,用于ComboBox_1的选择值)并切换到tabItem_2并在comboBox_2中选择一些内容(DataGrid_2显示来自DB的表格,用于我选择ComboBox_2的值)

但是当我回到TabItem_1时,来自TabItem_1的错误:

  

对象引用未设置为对象实例

当我确定'确定'一切正常。 我怎么解决它?

XAML代码:

async.mapSeries(modem_serial, function (m_serial_no, done) {
    Modem.findOne({ m_serial_no: m_serial_no }, { _id: 0, __v:0 }, function (err, m_data) {
        // if an error occurs, stop everything
        if (err) 
            return done(err);
        // if a modem is found, send it back
        if (m_data) 
            return done(null, m_data);
        // otherwise
        done(null, { m_model: 'No data', m_serial_no: 'No data' });
    });
}, function (err, modems) {
    // when the iteration is done or if an error occurred, it will come here
    console.log(err, modems);
});

CS代码:

 <TabItem Background="Bisque" ToolTip="W tym oknie możesz przeglądnąć historię wypożyczeń danej ksiązki, wybierz z ComboBoxa pozycje i przycisk kliknij wczytaj">
                <TabItem.Header>
                    <StackPanel Orientation="Horizontal" >
                        <TextBlock Text="Historia książęk"  FontSize="16" />
                    </StackPanel>
                </TabItem.Header>
                <StackPanel>
                    <ComboBox x:Name="cBox_hisBooks"  HorizontalAlignment="Center" Margin="5" VerticalAlignment="Top" Width="300"  ToolTip="Rozwiń liste i wybierz książkę, której historie wypożyczeń chcesz wyświetlić" IsEnabled="True" Loaded ="cBox_hisBooks_Loaded" SelectionChanged="cBox_hisBooks_SelectionChanged"/>
                    <!-- DisplayMemberPath="HISTORies"-->
                    <DataGrid x:Name="dg_hisBooks" AutoGenerateColumns="False" VerticalAlignment="Center" Height="400"  ToolTip="Podgląd bazy danych z ewidencja czytelników wypożyczeń, aby odświeżyć naciśnij przycisk poniżej" Loaded="dg_hisBooks_Loaded" SelectionChanged="dg_hisBooks_SelectionChanged" Margin="10,5">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="ID czytelnika" Binding="{Binding USER.USERID}"/>
                            <DataGridTextColumn Header="Imię czytelnika" Binding="{Binding USER.FIRSTNAME}"/>

private void cBox_hisBooks_Loaded(object sender, RoutedEventArgs e)      // ok 
        {
            try         // próba połaczenia z baza Oracle
            {
                List<BOOK> books = new List<BOOK>();
                using (EntitiesDBTest db = new EntitiesDBTest())
                {
                    books = db.BOOKS.OrderBy(b => b.TITLE).ToList();
                }

                var combo_HB = sender as ComboBox; // zmienna przyjmujaca wartosc z ComboBoxa
                combo_HB.ItemsSource = books;       // zrodlo opcji do wyboru
                combo_HB.DisplayMemberPath = "GetTitleWithAuthor";
                combo_HB.SelectedValuePath = "BOOKID";
                // combo_HB.SelectedIndex = 1;        // domyslnie wybrana opcja (domyslnie 0 czyli pierwsza)

                con.Close(); // zamkniecie bazy danych

            }
            catch (Exception Ex)
            {
                MessageBox.Show("Błąd ładowania listy comboBoxa w historii książek\n " + Ex.Message, "Error 1", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

enter image description here

1 个答案:

答案 0 :(得分:0)

每次更改选定的选项卡时都会调用已加载。 因此,您需要在第二次调用Loaded处理程序方法时检查who是否为null。