【发布时间】:2014-10-06 14:10:02
【问题描述】:
我有一个System.Windows.Forms.DataGridView 来显示我的类型IECInstance 的对象。
我正在构建一个DataTable 并用我的对象填充表格并将DataTable 设置为我的DataGridView 的DataSource。所以我的 DataGridView 正确显示了我的对象。
我现在的问题是在选择行时获取对象。
我的第一次尝试是使用这个:
IECInstance theObjectIWant = dataGridView.SelectedRows[0].DataBoundItem as IECInstance.
但是DataBountItem 返回一个DataRowView。
所以我在 SO 上发现了很多关于这个问题的问题,有些人建议使用这个:
var drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView;
var row = drv.Row as DataRow;
var val = row[X] as MyType;
但据我所知,row[X] 是对单元格(列)的访问,因此与我的问题不匹配。
当我使用List<IECInstances> 作为DataSource 而不是DataTable 时,属性DataBoundItem 返回正确的对象。但实际上我不想将 DataSource 设置为 List。
为了确保:当我谈论对象时,我指的是我的 IECInstace 类型的业务对象。
【问题讨论】:
-
dataGridView.SelectedRows[0].Cells[0].Value as IECInstance等有什么问题?或dataGridView.SelectedCells[0].Value as IECInstance -
我想要行中的对象,而不仅仅是单元格中的值。
-
但单元格中的值将是表中的对象。而行只是单元格的集合
-
所以 DataTable 不能容纳对象?只是价值观?我认为一排是一个对象。而一个单元格只是对象的一个属性。
-
不,不,值是对象。不要让单词“值”欺骗您,它们是任何数据类型的真实对象。与值与引用类型无关..!
标签: c# winforms datagridview datatable datarowview