将对象强制转换为数据行视图

本文关键字:数据 视图 转换 对象 | 更新日期: 2023-09-27 18:36:13

我有一个DataGrid,其中每一行都是一个对象。我想编辑/删除一行。我使用这个得到选定的行:

 DataRowView dataRow = (DataRowView)dataGridIkuns.SelectedItem; // Selected row.

但是,它会引发以下异常:

无法将类型为"IkunDataBaseObject"的对象转换为类型"System.Data.DataRowView"。

如何从数据网格中获取一行?

在我更改将信息插入数据网格的方式之前,此行效果很好。在从数据库访问加载信息之前,我将其作为对象插入。

我插入到数据网格:

ObservableCollection<IkunDataBaseObject> lstIkunsDB = 
    new ObservableCollection<IkunDataBaseObject>();
for (int counterIkunsDB = 0; counterIkunsDB < rowCount2; counterIkunsDB++)
{
    IkunDataBaseObject ikunTempDB = new IkunDataBaseObject(txtNumOfIkunDG, 
        txtNumOfRadarDG, txtObserverDG, txtLatDG, txtLongDG, 
        txtLatByCuttingDG, txtLongByCuttingDG, txtDeviationDG, 
        txtLatDeviation, txtLongDeveation);
    lstIkunsDB.Add(ikunTempDB);

}
dataGridIkuns.ItemsSource = lstIkunsDB;

将对象强制转换为数据行视图

正如你提到的,一行是一个对象,所以你必须把它转换为一个IkunDataBaseObject对象。如果正确设置了数据绑定,则可以从数据网格中获取作为选定项的对象,并将其从集合 lstIkunsDB 中删除。

IkunDataBaseObject obj = (IkunDataBaseObject)dataGridIkuns.SelectedItem;
lstIkunsDB.Remove(obj);

对于编辑,您应该在 IkunDataBaseObject 类 roperties 上实现 INotifyPropertyChanged 接口,然后它应该在您更改对象中的属性时更新数据网格。