4

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

当 ComboBox 中的文本发生更改时,搜索结果将显示在数据网格下方。When any row from the datagrid is selected its values are displayed in textboxes for editing.

当我在组合框中写一些东西时,相关的行会显示在数据网格中,但是当我单击选择一行时,应用程序会抛出一个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);
}
4

2 回答 2

5
 CategoryName.Text = categoryMember.CategoryName; //Exception thrown on this statement

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

  • categoryMember.CategoryNameCategoryName属性本身)返回nullTextBox.Text如果您将值设置为 ,则类似的属性会引发异常null
  • CategoryName(控制)是null

另外,我看到您进行了null检查(用于调试?),但已将其注释掉。如果CategoryDataGrid.SelectedItem不可分配给CategoryTbl,您将收到 nullcategoryMember本身。

于 2012-09-25T18:58:38.667 回答
1

除了@Reed 回答会说,考虑到你说Button点击它就可以工作,我想Button是在单元格上。在这种情况下,返回的类型是不同的,那么可能会发生在CategoryDataGrid.SelectedItem. 很可能CategoryDataGrid.SelectedItem是某种类型的容器,而不是直接类型的容器CategoryTbl

希望这可以帮助。

于 2012-09-25T19:01:35.163 回答