InvalidCastException从DataBoundItem获取值

本文关键字:获取 DataBoundItem InvalidCastException | 更新日期: 2023-09-27 18:02:26

我试图使用源查询列名在DataGridView行中获取单元格的值。DataGridView是从BindingSource填充的(因为它的DataSource属性被设置为BindingSource)

var obj = dataGridView1.CurrentRow.DataBoundItem;
var item = (DataRow)obj;

在第二行我得到一个InvalidCastException:

Unable to cast object of type 'System.Data.DataRowView' to type 'System.Data.DataRow'.

InvalidCastException从DataBoundItem获取值

我猜你的数据源是一个数据表。在这种情况下,DataBoundItem的类型是DataRowView而不是DataRow。这是基于DataGridView使用DataTable的默认视图这一事实。如果你想访问DataRow,你需要这样做:

        var obj = dataGridView1.CurrentRow.DataBoundItem;
        if (obj != null)
        {
            var item = ((DataRowView)obj).Row;
        }

Ps:我总是避免对理论上可以为null的对象进行显式强制转换。