WPF C#datagrid对象引用未设置为对象的实例

时间:2016-04-28 03:30:47

标签: c# wpf datagridview datagrid

我真的厌倦了这个错误。什么对象,什么参考,什么......叹息......无论如何,我在这里做的是用数据库中的数据填充数据网格。我正在寻找我的记录......无论我是否真的选择了一个项目,当我再次按下搜索按钮时(可能会优化搜索参数),我得到的错误是“对象引用未设置为实例一个对象“。它在以下代码中的“Pnum”行中不断出现:

private void DgPatSrch_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        var id = ((DataRowView)DgPatSrch.SelectedItem).Row["Pnum"].ToString();
        var name = ((DataRowView)DgPatSrch.SelectedItem).Row["Pname"].ToString();
        var dob = ((DataRowView)DgPatSrch.SelectedItem).Row["Dob"].ToString();
        TbPatIdReadOnly.Text = id;
        TbPatNameReadOnly.Text = name;
        TbDobReadOnly.Text = dob;

    }

那么,我将如何填充数据网格,而不是像我填充的那样,传递新的参数并重新填充它?除了重新填充之外,一切似乎都有效。看起来我需要重新初始化数据网格或清除或刷新......但这些都没有奏效......请帮忙!!!

1 个答案:

答案 0 :(得分:3)

这是因为重新填充网格时SelectedItem将变为null

您将首先提取所选项目,将其强制转换为正确的类型,因为SelectedItem属性返回object,然后根据需要使用强制转换对象。如果不是null

,则提供此信息
private void DgPatSrch_SelectionChanged(object sender, SelectionChangedEventArgs e) {
    var selectedItem = DgPatSrch.SelectedItem as DataRowView;
    if(selectedItem != null) {
        var id = selectedItem.Row["Pnum"].ToString();
        var name = selectedItem.Row["Pname"].ToString();
        var dob = selectedItem.Row["Dob"].ToString();
        TbPatIdReadOnly.Text = id;
        TbPatNameReadOnly.Text = name;
        TbDobReadOnly.Text = dob;
    }
}