c# - WPF C# 数据网格对象引用未设置为对象的实例

标签 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;

    }

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

最佳答案

这是因为当您重新填充网格时,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;
    }
}

关于c# - WPF C# 数据网格对象引用未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36904754/

相关文章:

c# - 奇怪的 WPF 错误

c# - 使用一个文本框和多个参数将 SQL 数据库过滤到 DataGridView

c# - 如何在运行时替换方法实现?

c# - 从字符串构建表达式<Func<T,bool>>

.net - FileInfo.OpenText() 无法读取特殊字符üò°

c# - 加快 datagridview 单元格字体更改

.net - 禁用 datagridview 中的默认 Enter/Return 键行为

c# - 以编程方式使用用户控件

C# 慢慢写入控制台

c# - 将 ResourceDictionary 添加到类库