我真的厌倦了这个错误。什么对象,什么参考,什么......叹息......无论如何,我在这里做的是用数据库中的数据填充数据网格。我正在寻找我的记录......无论我是否真的选择了一个项目,当我再次按下搜索按钮时(可能会优化搜索参数),我得到的错误是“对象引用未设置为实例一个对象“。它在以下代码中的“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;
}
那么,我将如何填充数据网格,而不是像我填充的那样,传递新的参数并重新填充它?除了重新填充之外,一切似乎都有效。看起来我需要重新初始化数据网格或清除或刷新......但这些都没有奏效......请帮忙!!!
答案 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;
}
}