将对象强制转换为数据行视图
本文关键字:数据 视图 转换 对象 | 更新日期: 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 接口,然后它应该在您更改对象中的属性时更新数据网格。