我有一个DataGrid,其中每一行都是一个对象。我想编辑/删除一行。我使用这个获得所选行:
DataRowView dataRow = (DataRowView)dataGridIkuns.SelectedItem; // Selected row.
但是,它会抛出以下异常:
无法将'IkunDataBaseObject'类型的对象强制转换为'System.Data.DataRowView'。
如何从DataGrid中获取一行?
在我改变向数据网格插入信息的方式之前,这条线路非常完美。在从数据库访问加载信息之前,我将信息作为对象插入。
我对数据网格的插入:
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;
答案 0 :(得分:0)
正如您所提到的,行是一个对象,因此您必须将其转换为IkunDataBaseObject对象。 如果正确设置了数据绑定,则可以从数据网格中获取所选项目的对象,并将其从集合lstIkunsDB中删除。
IkunDataBaseObject obj = (IkunDataBaseObject)dataGridIkuns.SelectedItem;
lstIkunsDB.Remove(obj);
对于编辑,您应该在IkunDataBaseObject类属性上实现INotifyPropertyChanged接口,然后每当您更改对象中的属性时它都应该更新数据网格。