即使对象不为空,也会出现空引用异常



我是wpf的新手;我正在使用可编辑的组合框(用于搜索目的)。

更改组合框中的文本时,搜索结果将显示在数据网格下方。从数据网格中选择任何行时,其值将显示在文本框中以供编辑。

当我在组合框中编写内容时,相关行显示在数据网格中,但是当我单击以选择一行时,应用程序会抛出nullreference exception

当 dataGrid 刷新逻辑位于按钮单击后面时,我的应用程序正常工作。

dataGrid 的 "SelectionChange" 事件的代码是:

private void CategoryRowSelected(object sender, System.Windows.Controls.SelectedCellsChangedEventArgs e)
{
    ClearForm();
    if(CategoryDataGrid.SelectedItem!=null)
    {
        categoryMember = CategoryDataGrid.SelectedItem as CategoryTbl; // value assigned to the object
        // if (categoryMember != null)
        CategoryName.Text = categoryMember.CategoryName; //Exception thrown on this statement
        CategoryDescription.Text = categoryMember.CategoryDescription;
    }       
}

ComboBox 的 textChange 事件的代码为:

private void RefreshDataGrid(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
    CategoryDataGrid.SelectedIndex = -1;           
    //CategoryDataGrid.ItemsSource = RefreshQuery;
    CategoryDataGrid.ItemsSource= Admin.RefreshCategoryDataGrid(NameCombo.Text);
}
 CategoryName.Text = categoryMember.CategoryName; //Exception thrown on this statement

发生这种情况可能有多种原因 - 不仅仅是因为categoryMember为空。 如果出现以下情况,也会发生这种情况:

  • categoryMember.CategoryNameCategoryName属性本身)返回 null ,因为如果将值设置为 nullTextBox.Text和类似属性会引发异常。
  • CategoryName(控件)null

另外,我看到您进行了null检查(用于调试?),但它被注释掉了。 如果CategoryDataGrid.SelectedItem不能分配给CategoryTbl,你将在categoryMember本身收到空值。

除了@Reed答案之外,还会说,考虑到您说在单击Button它就可以工作,我想象Button在单元格上。在这种情况下,返回的类型与CategoryDataGrid.SelectedItem中可能发生的类型不同。最有可能CategoryDataGrid.SelectedItem是某种类型的容器,而不是直接的类型CategoryTbl

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新